我想用运算符N转换矩阵M的每一列.Eigen允许用预乘法表示:
M.colwise() *= N;
但乘法M_j * N
在数学上是未定义的。
有没有办法避免编写循环?
答案 0 :(得分:0)
如果您想将左侧M
的每一列乘以N
,只需执行正常的矩阵 - 矩阵乘法:
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);