0

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

M.colwise() *= N;

但是乘法M_j * N在数学上是不确定的。

有什么方法可以避免编写循环吗?

4

1 回答 1

0

如果你想从左边乘以每一列MN只需执行一个普通的矩阵-矩阵-乘法:

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);
于 2017-05-23T07:37:02.137 回答