【问题标题】:Eigen SparseMatrix reserve nnz特征稀疏矩阵保留 nnz
【发布时间】:2023-03-29 15:15:02
【问题描述】:

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

这意味着如果我这样做

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

然后

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

文档只说

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

预分配reserveSize非零。

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


谁能澄清一下?或者谈谈预订政策?谢谢

【问题讨论】:

    标签: c++ sparse-matrix eigen


    【解决方案1】:

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

    SparseMatrix<float> A(n,n);
    

    保留,例如:

    A.reserve(10*n);
    

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

    A.conservativeResize(rows,cols);
    

    【讨论】:

    • 所以这意味着如果我知道开头的尺寸说 SparseMatrix&lt;float&gt; A(m, m); A.reserve(n); 然后 inner indicesdata 捕获 n 内存和 外部索引捕获m+1内存?
    • 第一部分是正确的,但不是最后一部分:外部索引的内存由 A(m,m) 构造函数分配和初始化。 reserve 与外部索引无关。
    • 非常感谢。也许您应该编辑并将其包含在您的答案中。
    猜你喜欢
    • 2013-09-25
    • 1970-01-01
    • 2016-10-09
    • 2015-08-24
    • 2019-05-21
    • 1970-01-01
    • 1970-01-01
    • 2022-11-23
    • 2016-02-08
    相关资源
    最近更新 更多