当然v
,a
是Eigen::VectorXd
n维的向量,我想进行以下分段操作:
v
by a
,即向量的分段乘法(a[1]*v[1], ..., a[n]*v[n])
,和
分段的正方形v
,即矢量(v[1]*v[1], ..., v[n]*v[n])
.
是否Eigen
提供上述操作的方法,还是需要手动实现?当然非常简单,但我希望他们尽可能快地运行.
为了处理诸如你的问题之Array
类的元素操作,Eigen提供了类.因此,要执行您询问的操作,您可以将逐点产品编写为:
c = a.array() * v.array(); // Long version c = a.cwiseProduct(v); // Short(er) version
对于你有的广场:
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
使用a VectorXd
作为数组不会产生副本,因此它非常有效.