为了处理诸如你的问题之Array类的元素操作,Eigen提供了类.因此,要执行您询问的操作,您可以将逐点产品编写为:
c = a.array() * v.array(); // Long version
c = a.cwiseProduct(v); // Short(er) version
Run Code Online (Sandbox Code Playgroud)
对于你有的广场:
s = v.array().square(); // Probably what you want to use
s = v.array().abs2(); // Two operations: abs() then square()
s = v.cwiseAbs2(); // Same as above
Run Code Online (Sandbox Code Playgroud)
使用a VectorXd作为数组不会产生副本,因此它非常有效.