[英]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 的信息。
有三個關鍵屬性:
最后一個值表示具有值的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.