gpt4 book ai didi

optimization - Eigen :按行复制(广播)

转载 作者:行者123 更新时间:2023-12-03 16:52:30 33 4
gpt4 key购买 nike

我想复制矩阵的每一行 M没有任何复制发生(即通过创建 View ):

0  1          0  1
2 3 -> 0 1
2 3
2 3
  • M.rowwise().replicate(n)M.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()) ;
  • 在某些情况下,我可能会使用中间 View Eigen::Map<Eigen::MatrixXi>(M.data(), 1, M.size()).replicate(rowFactor, 1)通过 reshape 其他操作数,但这不是很令人满意。

有没有合适的方法来实现这个广播 View ?

最佳答案

你想要的本质上是一个 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 不能保证稳定(尽管我认为该模块自推出以来没有改变)。

关于optimization - Eigen :按行复制(广播),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45466391/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com