我有一个EnumApplications.IOS.ToString()
,我需要修改对角线中元素的值。特别是我有另一个Eigen::MatrixXd
,只有一个列和第一个矩阵的行数相同。
我需要将第一个矩阵的对角线减去第二个矩阵元素的值。
示例:
Eigen::MatrixXd
我该怎么办?
答案 0 :(得分:6)
这对我有用:
A_2=A-B.asDiagonal();
答案 1 :(得分:5)
实现这一目标的最简单,最快捷的方法是:
Eigen::MatrixXd A1(3,3), B(3,1), A2;
...
A2 = A1;
A2.diagonal() -= B;
当然,最好使用VectorXd
类型的向量(此处为B
),最后如果B
是常量,则可以使用数组工具:
A2.diagonal().array() -= 1;
答案 2 :(得分:0)
for(int i = 0; i < matrix1.rows(); ++i)
matrix1(i, i) -= matrix2(i, 0);
此代码迭代矩阵的每一行(matrix1.rows()
),并从matrix1(matrix2(i, 0)
)中的对角线中减去matrix2(matrix1(i, i)
)的对应值。
答案 3 :(得分:0)
Eigen
中的矩阵操作与数组的操作非常相似。索引从零开始,它是行主要的。文档(Eigen: The Matrix Class写得很好,可以帮助您解决未来的问题。
对于您所述的问题,解决方案如下:
#include <iostream>
#include <eigen3/Eigen/Dense>
using Eigen::MatrixXd;
int main()
{
MatrixXd matA(3,3), matB(3,1);
matA<<1,2,3,
4,5,6,
7,8,9;
matB<<1,1,1;
for(int i=0; i<3;i++)
matA(i,i) -= matB(i);
std::cout<<matA<<std::endl;
return 0;
}
但是,我会分别使用Matrix3d和Vector3d作为第一个和第二个矩阵。