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

按照文档中的指示,我通过以下方法初始化了上面的矩阵
在程序的后面部分,很自然地重用矩阵,只更新A,B块。可能的方法是:
coeffRef访问现有条目,将引入二进制搜索,因此这里不首选。但是,似乎没有必要对所有非零项进行迭代,因为稀疏矩阵的大部分部分保持不变。
可以在不迭代矩阵中的所有非零的情况下更新A,B的位置吗?
发布于 2022-06-13 10:19:58
据我所知,InnerIterator可用于此,并在恒定时间内运行。
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())每列有一个条目。
https://stackoverflow.com/questions/72599099
复制相似问题