2
我想複製矩陣M
的每一行,而不發生任何拷貝(通過創建一個視圖IE):本徵:複製(廣播)由行
0 1 0 1
2 3 -> 0 1
2 3
2 3
M.rowwise().replicate(n)
爲shorcutM.replicate(1,n)
這似乎有點無用。以下代碼片段會執行副本,並且如果
M
是表達式,則無法工作。
Eigen::Index rowFactor = 2; Eigen::MatrixXi M2 = Eigen::Map(M.data(), 1, M.size()).replicate(rowFactor, 1); M2.resize(M.rows()*rowFactor, M.cols()) ;
- 在某些情況下,我可能會重塑其它操作數使用中間視圖
Eigen::Map<Eigen::MatrixXi>(M.data(), 1, M.size()).replicate(rowFactor, 1)
,但是這不是非常令人滿意。
是否有適當的方法來實現此廣播視圖?
不錯的解決方案,儘管使用了臨時向量和乘法。我必須檢查這個產品是否懶惰。 – YvesgereY
'Vector2i :: Ones()'不會被顯式生成。確實會發生乘法,但我相信,至少對於整數來說,編譯器將能夠優化這些。如果您想100%確定不會發生乘法,請查看KroneckerProduct的實現。 – chtz
你說得對。即使動態版本「VectorXi :: Ones(size)」也會返回一個優化的「常量」向量。 – YvesgereY