修改特征矩阵对角线

Nic*_*ick 6 c++ matrix eigen diagonal

我有一个Eigen::MatrixXd,我需要修改其对角线元素的值.特别是我有另一个Eigen::MatrixXd有一个单独的列和第一个矩阵的相同行数.

我需要减去第一个矩阵的对角线,第二个矩阵的元素的值.

例:

A
 1 2 3
 4 5 6
 7 8 9

B
 1
 1
 1


A'
 0 2 3
 4 4 6
 7 8 8
Run Code Online (Sandbox Code Playgroud)

我能怎么做?

Ash*_*Ash 6

这对我有用:

A_2=A-B.asDiagonal();
Run Code Online (Sandbox Code Playgroud)


gga*_*ael 5

实现这一目标的最简单,最快捷的方法是:

Eigen::MatrixXd A1(3,3), B(3,1), A2;
...
A2 = A1;
A2.diagonal() -= B;
Run Code Online (Sandbox Code Playgroud)

当然,最好使用VectorXdvector 的类型(这里是B),最后如果B是常量,那么你可以使用数组工具:

A2.diagonal().array() -= 1;
Run Code Online (Sandbox Code Playgroud)

  • 这比"A - B.asDiagonal()"更简单,更快? (2认同)