Eigen: Replicate (broadcast) by rows
我想复制矩阵
1 2 3 4 | 0 1 0 1 2 3 -> 0 1 2 3 2 3 |
-
M.rowwise().replicate(n) 是M.replicate(1,n) 的捷径,看起来没什么用。 -
以下代码片段进行复制,如果
M 是表达式,则无法工作。
1 2 3 | 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) ,但这并不是很令人满意。
有没有合适的方法来实现这个广播视图?
你想要的本质上是一个带有一个矩阵的 Kronecker 乘积。您可以为此使用(不受支持的)KroneckerProduct 模块:
1 2 3 4 5 6 7 8 | #include <iostream> #include <unsupported/Eigen/KroneckerProduct> int main() { Eigen::Matrix2i M; M << 0, 1, 2, 3; std::cout << Eigen::kroneckerProduct(M, Eigen::Vector2i::Ones()) << '\ '; } |
"不受支持"意味着模块的 API 不能保证是稳定的(尽管我认为这个模块自推出以来就没有改变过)。