如何将块矩阵添加到 Eigen 中的稀疏矩阵
How to add a block matrix onto a sparse matrix in Eigen
比如我有一个10x10的稀疏矩阵A,我想在A的左上角添加一个3x3的单位矩阵。
已知 A 在这 3 个条目中已经非零。
如果我必须一个一个地添加值也可以,但是我没有找到在 Eigen 中操作稀疏矩阵元素的方法。
我错过了什么吗?
如果您只想一次对特定元素应用一个操作,您可以像这样使用 coeffRef
:
typedef Eigen::Triplet<double> T;
std::vector<T> coefficients;
for (int i = 0; i < 9; i++) coefficients.push_back(T(i, i, (i % 3) + 1));
Eigen::SparseMatrix<double> A(10, 10);
A.setFromTriplets(coefficients.begin(), coefficients.end());
std::cout << A << "\n\n";
for (int i = 0; i < 3; i++) A.coeffRef(i,i) += 1;
std::cout << A << "\n\n";
比如我有一个10x10的稀疏矩阵A,我想在A的左上角添加一个3x3的单位矩阵。
已知 A 在这 3 个条目中已经非零。
如果我必须一个一个地添加值也可以,但是我没有找到在 Eigen 中操作稀疏矩阵元素的方法。
我错过了什么吗?
如果您只想一次对特定元素应用一个操作,您可以像这样使用 coeffRef
:
typedef Eigen::Triplet<double> T;
std::vector<T> coefficients;
for (int i = 0; i < 9; i++) coefficients.push_back(T(i, i, (i % 3) + 1));
Eigen::SparseMatrix<double> A(10, 10);
A.setFromTriplets(coefficients.begin(), coefficients.end());
std::cout << A << "\n\n";
for (int i = 0; i < 3; i++) A.coeffRef(i,i) += 1;
std::cout << A << "\n\n";