首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有效地更新特征中的大型稀疏矩阵的某些块?

有效地更新特征中的大型稀疏矩阵的某些块?
EN

Stack Overflow用户
提问于 2022-06-13 07:26:54
回答 1查看 99关注 0票数 5

假设我有一个具有以下模式的大型稀疏矩阵:

  • 每列的非零数及其位置是固定的。
  • 只有矩阵块A和B会改变,其余的矩阵保持不变;(块A和B本身也是稀疏的,固定的非零位置)

按照文档中的指示,我通过以下方法初始化了上面的矩阵

  • 为列主稀疏矩阵保留每列非零的确切数目
  • 逐列插入
  • 从每列最小行索引插入

在程序的后面部分,很自然地重用矩阵,只更新A,B块。可能的方法是:

  1. 通过coeffRef访问现有条目,将引入二进制搜索,因此这里不首选。
  2. 对外部和内部维度进行迭代,如文档所示的这里

但是,似乎没有必要对所有非零项进行迭代,因为稀疏矩阵的大部分部分保持不变。

可以在不迭代矩阵中的所有非零的情况下更新A,B的位置吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-06-13 10:19:58

据我所知,InnerIterator可用于此,并在恒定时间内运行。

代码语言:javascript
复制
Eigen::Index col = 1;
Eigen::Index offset_in_col = 1;

using SparseMatrixD = Eigen::SparseMatrix<double>;
SparseMatrixD mat = ...;

SparseMatrixD::InnerIterator i =
      SparseMatrixD::InnerIterator(mat, col) + offset_in_col;
assert(i.row() == 1);
assert(i.col() == 1);
assert(i.value() == C);

这应该访问C值。您只需要知道每列有多少个非零元素(或内部维度)。您不需要知道存储了多少非零列(外部维度),因为该数组(SparseMatrix.outerIndexPtr())每列有一个条目。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72599099

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档