【问题标题】:How to add a block matrix onto a sparse matrix in Eigen如何在 Eigen 中将块矩阵添加到稀疏矩阵中
【发布时间】:2016-05-04 06:50:57
【问题描述】:

例如我有一个 10x10 SparseMatrix A,我想在 A 的左上角添加一个 3x3 单位矩阵。

已知 A 在这 3 个条目中已经非零。

如果我必须逐个添加值也可以,但我没有找到在 Eigen 中对稀疏矩阵元素进行操作的方法。

我错过了什么吗?

【问题讨论】:

  • this 帖子。你真的不能在稀疏矩阵上使用所有块操作。
  • 元素操作怎么样?我看到有插入方法,但我可以为某些元素添加值吗?
  • 我没有关注。元素操作和向某些元素添加值是什么意思? m(i,j) += k; 之类的东西?
  • 是的。因为我只想添加一个不是很大的单位矩阵,所以做这样的操作可能比在稀疏矩阵上使用列操作更有效。

标签: c++ matrix eigen


【解决方案1】:

如果你只想一次对特定元素应用一个操作,你可以像这样使用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";

【讨论】:

    猜你喜欢
    • 2023-03-16
    • 2018-01-19
    • 2015-07-22
    • 2013-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-07
    • 1970-01-01
    相关资源
    最近更新 更多