我有例如矩陣:C(400,400)零位置添加行和列的矩陣特徵
,我想用一個載體來發展這一矩陣開始指數矩陣的0例如:
矩陣C:
3 2 5
4 5 6
7 8 20
我的新矢量:25 5 6 8
結果:
25 5 6 8
5 3 2 5
6 4 5 6
8 7 8 20
Eigen最好的辦法是什麼?使用.resize()
和.set
?感謝您的幫助
我有例如矩陣:C(400,400)零位置添加行和列的矩陣特徵
,我想用一個載體來發展這一矩陣開始指數矩陣的0例如:
矩陣C:
3 2 5
4 5 6
7 8 20
我的新矢量:25 5 6 8
結果:
25 5 6 8
5 3 2 5
6 4 5 6
8 7 8 20
Eigen最好的辦法是什麼?使用.resize()
和.set
?感謝您的幫助
我能想出的最好的是:
Eigen::MatrixXd newC(C.rows()+1, C.cols()+1);
newC << v.transpose(), v.tail(v.size()-1), C;
C.swap(newC);
這裏假設你的「新載體」存儲爲v
的列向量。此片段後不再需要變量newC
。
雖然我會用Jitse的方法爲好,給你另一種選擇,這裏是一個解決方案,是一個比較冗長,可以表現出更好的所在部位去:
Eigen::MatrixXd newC(C.rows()+1, C.cols()+1);
newC.topRows<1>() = v.transpose();
newC.leftCols<1>() = v;
newC.bottomRightCorner(C.rows(),C.cols()) = C;
C.swap(newC)
注意,這個分配左上角元素兩次;如果你不希望這樣,這個醜陋的一個替換第三行:
newC.topRows<1>().tail(v.size()-1) = v.transpose().tail(v.size()-1);
最後一點,爲什麼我們不使用resize
:它總是一個萎縮的時候扔掉你的矩陣的內容(甚至矩陣),除非元素的數量保持完全相同,即當您將MxN
矩陣調整爲(M*k)x(N/k)
時。