Armadillo 稀疏矩阵大小(以字节为单位)
Armadillo Sparse Matrix Size in Bytes
我想评估 Armadillo 稀疏矩阵有多大。这个问题与关于稠密矩阵有关。
考虑以下示例:
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
在密集矩阵的情况下,不是 return 矩阵本身的大小,而是指针或其他一些小 object 的大小.稀疏矩阵的大小不应简单地是 non-zero 元素的数量乘以数据类型的大小。 Armadillo 以压缩格式存储稀疏矩阵。在单元格值之上,还应该有一个矩阵或向量存储单元格索引。我猜矩阵也有一个 header 存储关于 object.
的信息
三个关键属性:
- n_rows
- n_cols 和
- n_nonzero
最后一个值表示有值的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序列化:
分配的实际字节数将大致与 n_nonzero
相关,但您必须考虑 /some/ 开销。在实践中,衡量 实际 分配的最佳方法是使用检测分配器,或(该想法的逻辑扩展)内存分析器。参见例如
我想评估 Armadillo 稀疏矩阵有多大。这个问题与
考虑以下示例:
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
在密集矩阵的情况下,不是 return 矩阵本身的大小,而是指针或其他一些小 object 的大小.稀疏矩阵的大小不应简单地是 non-zero 元素的数量乘以数据类型的大小。 Armadillo 以压缩格式存储稀疏矩阵。在单元格值之上,还应该有一个矩阵或向量存储单元格索引。我猜矩阵也有一个 header 存储关于 object.
三个关键属性:
- n_rows
- n_cols 和
- n_nonzero
最后一个值表示有值的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序列化:
分配的实际字节数将大致与 n_nonzero
相关,但您必须考虑 /some/ 开销。在实践中,衡量 实际 分配的最佳方法是使用检测分配器,或(该想法的逻辑扩展)内存分析器。参见例如