我想复制矩阵where
的每一行而不发生任何副本(即通过创建视图):
M
0 1 0 1
2 3 -> 0 1
2 3
2 3
是M.rowwise().replicate(n)
的缩写,似乎没用。
以下代码段会复制,如果M.replicate(1,n)
是表达式,则无效。
Eigen::Index rowFactor = 2; Eigen::MatrixXi M2 = Eigen::Map(M.data(), 1, M.size()).replicate(rowFactor, 1); M2.resize(M.rows()*rowFactor, M.cols()) ;
M
,但这不是很令人满意。是否有正确的方法来实现此广播视图?
答案 0 :(得分:3)
你想要的基本上是Kronecker product,其中包含一个矩阵。您可以使用(不支持的)KroneckerProduct module:
#include <iostream>
#include <unsupported/Eigen/KroneckerProduct>
int main() {
Eigen::Matrix2i M; M << 0, 1, 2, 3;
std::cout << Eigen::kroneckerProduct(M, Eigen::Vector2i::Ones()) << '\n';
}
“不支持”意味着模块的API不能保证稳定(尽管这个模块自推出以来没有改变过,我认为)。