繁体   English   中英

犰狳稀疏矩阵大小(以字节为单位)

[英]Armadillo Sparse Matrix Size in Bytes

我想评估犰狳稀疏矩阵有多大。 这个问题与关于稠密矩阵的这个答案有关。

考虑以下示例:

void some_function(unsigned int matrix_size) {
  arma::sp_mat x(matrix_size, matrix_size);

  // Steps entering some non-zero values

  std::cout << sizeof(x) << std::endl;
}

不幸的是, sizeof与密集矩阵的情况一样,不会返回矩阵本身的大小,而是返回指针或其他一些小的 object 的大小。 稀疏矩阵的大小不应简单地是非零元素的数量乘以数据类型的大小。 Armadillo 以压缩格式存储稀疏矩阵。 在单元格值之上,还应该有一个矩阵或向量来存储单元格索引。 而且我猜该矩阵还有一个 header 存储有关 object 的信息。

有三个关键属性:

  • n_rows
  • n_cols 和
  • n_非零

最后一个值表示具有值的cells 0 <= n_nonzero <= (n_rows*n_cols)的数量。

您可以使用它来了解密度(也显示为.print的百分比,例如

[matrix size: 3x3; n_nonzero: 4; density: 44.44%]

     (1, 0)         0.2505
     (0, 1)         0.9467
     (0, 2)         0.2513
     (2, 2)         0.5206

我之前使用这些属性来实现 sp_matrix 序列化: How to serialize sparse matrix in Armadillo and use with mpi implementation of boost?

分配的实际字节数将大致与n_nonzero相关,但您必须考虑 /some/ 开销。 在实践中,测量实际分配的最佳方法是使用检测分配器,或(该想法的逻辑扩展)memory 分析器。 参见例如如何找到 boost::dynamic_bitset 占用的 memory?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM