Трансляция (два) вектора в Eigen C ++ - PullRequest
1 голос
/ 08 июня 2019

Предположим, у меня есть вход ArrayXd размером 3:

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 объясняется, что вы можете транслировать вектор, но только в сочетании с матрицей (или двумерным массивом).Как это делается с двумя векторами?

1 Ответ

1 голос
/ 08 июня 2019

Вы ищете внешний продукт, который является ничем иным, как стандартным матричным продуктом:

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