特征库,用矩阵乘以矩阵列

时间:2012-11-21 11:30:51

标签: c++ matrix-multiplication eigen

我想用运算符N转换矩阵M的每一列.Eigen允许用预乘法表示:

M.colwise() *= N;

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

有没有办法避免编写循环?

1 个答案:

答案 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);