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