在Eigen中将稀疏矩阵系数归零的最佳方法?

时间:2015-02-27 16:54:00

标签: c++ eigen

Eigen C ++库中的SparseMatrix类型,假设

SparseMatrix<double, RowMajor> A;

似乎缺少使用InnerIterator或double *作为返回类型的coeffFind(i,j)方法。因此,为了确保A在位置(i,j)没有非零系数,我可以做

A.coeffRef(i,j) = 0.0;  // Adds an entry with zero value!

if (A.coeff(i,j) != 0.0) {
  A.coeffRef(i,j) = 0.0;  // Double look-up cost!
}

或编写我自己的查找方法,该方法将复制Eigen内部使用的二进制搜索。我该怎么办?

1 个答案:

答案 0 :(得分:0)

如果表现很重要(足够重要),我会自己写。否则,仅基于复杂性:

  1. 查找是O(log(nnz))
  2. 插入(O(1)或O(nnz)取决于插入的位置 - 如果矩阵被压缩,也会保留更多内存)
  3. 因此,如果没有元素,则成本为第二个选项的O(nnz)或第一个选项的O(log(nnz))。如果存在元素,则在任何情况下成本都将是O(log(nnz))的两倍,因此相对于第二种方法中的插入,保存O(log(nnz))不会显着。如果真的很重要,那就写下自己的。