我想評估犰狳稀疏矩陣有多大。這個問題與這個關于密集矩陣的答案有關。
考慮以下示例:
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在密集矩陣的情況下,不會回傳矩陣本身的大小,而是回傳指標或其他一些小物件的大小。稀疏矩陣的大小不應簡單地是非零元素的數量乘以資料型別的大小。Armadillo 以壓縮格式存盤稀疏矩陣。在單元格值之上,還應該有一個矩陣或向量存盤單元格索引。而且我猜矩陣還有一個標題,存盤有關物件的資訊。
uj5u.com熱心網友回復:
有三個關鍵屬性:
- 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/ 開銷。在實踐中,測量實際分配的最佳方法是使用檢測分配器或(該想法的邏輯擴展)記憶體分析器。參見例如如何找到 boost::dynamic_bitset 占用的記憶體?
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/364335.html
