检索 SciPy 稀疏矩阵消耗的字节数

Are*_*Tor 5 python scipy sparse-matrix memory-size

假设我想监视 SciPy 稀疏矩阵占用的内存mat。在 NumPy 中我会利用这个nbytes属性,但在 SciPy 中似乎没有这样的东西。我怎样才能检索这些信息?

hpa*_*ulj 5

我有稀疏矩阵X

In [605]: X
Out[605]: 
<100x100 sparse matrix of type '<class 'numpy.float64'>'
    with 1000 stored elements in Compressed Sparse Row format>
Run Code Online (Sandbox Code Playgroud)

getsizeof没有告诉我任何有用的东西

In [606]: import sys
In [607]: sys.getsizeof(X)
Out[607]: 28
Run Code Online (Sandbox Code Playgroud)

csr对于存储在 3 个数组中的矩阵,稀疏数据和索引为:

In [612]: X.data.nbytes
Out[612]: 8000
In [613]: X.indices.nbytes
Out[613]: 4000
In [614]: X.indptr.nbytes
Out[614]: 404
Run Code Online (Sandbox Code Playgroud)

因此,总空间大致是这些值的总和。

对于coo格式

In [615]: Xc=X.tocoo()
In [616]: Xc.data.nbytes
Out[616]: 8000
In [617]: Xc.row.nbytes
Out[617]: 4000
In [618]: Xc.col.nbytes
Out[618]: 4000
Run Code Online (Sandbox Code Playgroud)

我们可以根据 shape、dtype 和 nnz 计算这些值;例如 8 字节 * 1000、4 字节 * 1000、4 字节 * X.shape[0] 等。

其他格式需要了解其数据存储方法(例如lildok等)。

  • `48` - numpy 数组的典型标头大小(形状、步幅、标志等的空间) (2认同)