Eigen3:就地系数乘法

Phi*_*Lab 9 optimization eigen eigen3

如何使用 Eigen3 执行逐元素乘法?

a = a.cwiseProduct(b);
Run Code Online (Sandbox Code Playgroud)

运行到位?或者是

a.array() *= b.array();
Run Code Online (Sandbox Code Playgroud)

在风格和性能方面更好的解决方案?

cht*_*htz 8

两个表达式都应该生成相同的代码(使用合理优化的编译器),所以这更像是一个品味问题。

如果你正在做大多元为单位的运算ab你应该把他们定义为Eigen::Array(代替Eigen::Matrix)和只写a*=b;。如果您稍后需要访问ab以矩阵方式访问,您仍然可以使用a.matrix().