Eigen SparseMatrix保留nnz

时间:2017-01-11 16:50:43

标签: c++ sparse-matrix eigen

我想知道 Eigen 中的reserve方法是否也为外部索引内部索引(在3-CSC案例。)

这意味着如果我

n = 1000
SparseMatrix<float> A;
A.reserve(n)

然后

  • 数据
  • 分配n内存
  • 内部指数
  • 分配n内存
  • 外部索引分配n+1内存(最坏情况和先验未知)

文档只说

void Eigen::SparseMatrix<...>::reserve    (Index reserveSize) 
     

预分配reserveSize非零。

     

前提条件:矩阵必须处于压缩模式。

有人可以澄清一下吗?或者说一下预订政策?感谢

1 个答案:

答案 0 :(得分:0)

不,矩阵的大小应该是相当静态的,因此reserve(n)仅为非零分配空间。如果维度未知,则可以从上限开始:

SparseMatrix<float> A(n,n);

保留,例如:

A.reserve(10*n);

一旦你完成并且知道了最终尺寸,就缩小它:

A.conservativeResize(rows,cols);