向量的分段平方,C++ Eigen 中两个向量的分段乘积

Piece-wise square of vector, piece-wise product of two vectors in C++ Eigen

假定 vaEigen::VectorXd 个 n 维向量,我想进行以下分段操作:

Eigen是否提供了上述操作的方法,还是需要我自己手动实现?那里肯定很简单,但我希望他们尽快运行。

编辑:

好吧,如果第一个开始,第二个只是 a=v.

的特例

执行第一个操作的最简单方法是从 a 创建对角矩阵并进行正态乘积。

看一下docs,可以用a.asDiagonal()

关于效率,如果你想要它,也许这不是你想要的'as fast as possible'。在那种情况下,您应该根据循环和矢量构造来衡量它,看看对您来说是否有任何实际差异。

为了处理诸如您的问题之类的元素明智的操作,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作为数组不会产生复制,所以效率很高。