簡體   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