在 Eigen C++ 中广播(两个)向量

Broadcasting (two) vectors in Eigen C++

假设我有一个大小为 3 的输入 ArrayXd:

P[1]                   
P[2]                 
P[3]                 

我需要的对称 MatrixXd 大小为 [3,3]:

-P[1]*P[1]+P[1]   -P[2]*P[1]         -P[3]*P[1]  
-P[1]*P[2]        -P[2]*P[2]+P[2]    -P[3]*P[2]
-P[1]*P[3]        -P[2]*P[3]         -P[3]*P[3]+P[3] 

伪代码解决方案:

-1.0 * P.broadcast.rowwise() * P.broadcast.colwise() + diag(P)

问题: Eigen 手册解释说您可以广播向量,但只能与矩阵(或二维数组)结合使用。两个向量是怎么做到的?

您要找的 outer-product 就是标准矩阵乘积:

-P * P.transpose() + P.asDiagonal()