假定 v
、a
是具有 n 维的 Eigen::VectorXd
向量,我想进行以下分段操作:
v
与a
的分段乘法,即向量(a[1]*v[1], ..., a [n]*v[n])
, 和v
的分段平方,即向量(v[1]*v[1], ..., v[n]*v[n])
。
Eigen
是否提供了上述操作的方法,还是需要我自己手动实现?当然有非常简单的,但我希望它们运行得尽可能快。
最佳答案
为了处理诸如您的问题之类的元素明智的操作,Eigen 提供了 Array
类(class)。因此,要执行您询问的操作,您可以将逐点积写为:
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
使用 VectorXd
作为数组不会产生副本,因此效率很高。
关于c++11 - 向量的分段平方,C++ Eigen 中两个向量的分段乘积,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34373757/