我想通过运算符 N 转换矩阵 M 的每一列。Eigen 允许用预乘法来表达这一点:
M.colwise() *= N;
但是乘法M_j * N
在数学上是不确定的。
有什么方法可以避免编写循环吗?
我想通过运算符 N 转换矩阵 M 的每一列。Eigen 允许用预乘法来表达这一点:
M.colwise() *= N;
但是乘法M_j * N
在数学上是不确定的。
有什么方法可以避免编写循环吗?
如果你想从左边乘以每一列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);