在 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()
假设我有一个大小为 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()