自己的 SparseMatrix 储备 nnz
Eigen SparseMatrix reserve nnz
我想知道 Eigen 中的 reserve
方法是否也为 外部索引 和 内部索引(在 3-CSC 情况下。)
这意味着如果我这样做
n = 1000
SparseMatrix<float> A;
A.reserve(n)
然后
- 为数据
分配n
内存
- 为内部索引
分配n
内存
- 为外部索引分配
n+1
内存(最坏情况和先验未知)
文档只说
void Eigen::SparseMatrix<...>::reserve (Index reserveSize)
Preallocates reserveSize non zeros.
Precondition: the matrix must be in compressed mode.
谁能澄清一下?或者说说预订政策?谢谢
不,矩阵的大小应该是相当静态的,所以 reserve(n)
只为 non-zeros 分配 space。如果维度未知,可以从上限开始:
SparseMatrix<float> A(n,n);
保留,例如:
A.reserve(10*n);
完成并知道最终尺寸后,将其缩小:
A.conservativeResize(rows,cols);
我想知道 Eigen 中的 reserve
方法是否也为 外部索引 和 内部索引(在 3-CSC 情况下。)
这意味着如果我这样做
n = 1000
SparseMatrix<float> A;
A.reserve(n)
然后
- 为数据 分配
- 为内部索引 分配
- 为外部索引分配
n+1
内存(最坏情况和先验未知)
n
内存
n
内存
文档只说
void Eigen::SparseMatrix<...>::reserve (Index reserveSize)
Preallocates reserveSize non zeros.
Precondition: the matrix must be in compressed mode.
谁能澄清一下?或者说说预订政策?谢谢
不,矩阵的大小应该是相当静态的,所以 reserve(n)
只为 non-zeros 分配 space。如果维度未知,可以从上限开始:
SparseMatrix<float> A(n,n);
保留,例如:
A.reserve(10*n);
完成并知道最终尺寸后,将其缩小:
A.conservativeResize(rows,cols);