wuy*_*ng3 5 c++ sparse-matrix eigen eigen3
假设我有一个具有以下模式的大型稀疏矩阵:
按照文档中的说明,我已通过以下方式初始化了上述矩阵
在程序的后面部分,很自然地会重用矩阵并仅就地更新 A、B 块。可能的方式有:
coeffRef
会引入二分搜索,因此此处不推荐使用。然而,似乎没有必要迭代所有非零条目,因为稀疏矩阵的大部分保持不变。
是否可以就地更新 A、B 而无需迭代矩阵中的所有非零值?
据我所知,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);
Run Code Online (Sandbox Code Playgroud)
这应该访问值 C。您需要知道的是每列(或通常的内部维度)有多少个非零元素。您不需要知道存储了多少个非零列(外部维度),因为该数组 ( SparseMatrix.outerIndexPtr()
) 每列有一个条目。