[英]efficiently updating inplace certain blocks of a large sparse matrix in Eigen?
假設我有一個具有以下模式的大型稀疏矩陣:
按照文檔中的說明,我已通過以下方式初始化了上述矩陣
在程序的后面部分,很自然地重用矩陣並且只更新 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);
這應該訪問值 C。您只需要知道每列(或通常的內部維度)有多少非零元素。 您不需要知道存儲了多少非零列(外部維度),因為該數組( SparseMatrix.outerIndexPtr()
)每列有一個條目。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.