【问题标题】:Eigen library, multiply columns of matrix by square matrix特征库,将矩阵的列乘以方阵
【发布时间】:2012-11-21 11:30:51
【问题描述】:

我想通过算子 N 来转换矩阵 M 的每一列。Eigen 允许用预乘法来表达这一点:

M.colwise() *= N;

但乘法 M_j * N 在数学上是未定义的。

有没有办法避免写循环?

【问题讨论】:

  • @DumbCoder 我需要定义一个 typedef 来将列映射到 std::array 等。 Eigen 不提供列迭代器。

标签: c++ matrix-multiplication eigen


【解决方案1】:

如果你想将M的每一列从左边乘以N,只需执行一个普通的matrix-matrix-multiplication:

M = N * M;

这会将N*M 评估为一个临时对象,然后将其移至M。 如果您经常这样做并希望为此重新使用分配的内存,请在之前的某处声明一个临时矩阵 M_temp 并写入

M_temp.noalias() = N * M;
M.swap(M_temp);  // M_temp has the old memory of M; Swapping is O(1)

如果怕内存消耗太多,可以写类似

for(long i=0; i<M.cols()-3; i+=4)
    M.middleCols<4>(i) = N * M.middleCols<4>(i);
M.rightCols(M.cols()%4) = N * M.rightCols(M.cols()%4);

【讨论】:

    猜你喜欢
    • 2022-11-08
    • 1970-01-01
    • 2021-12-31
    • 1970-01-01
    • 2013-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-31
    相关资源
    最近更新 更多