为什么scipy稀疏矩阵内存的使用与矩阵中元素的数量无关?

时间:2017-04-28 13:21:43

标签: python memory scipy sparse-matrix

我有两个scipy矩阵'a'和'b',其中包含布尔值。 'a'比'b'更大:765565值只有3个值。

In [211]: a
Out[211]: <388839x8455 sparse matrix of type '<class 'numpy.bool_'>'
           with 765565 stored elements in Compressed Sparse Row format>
In [212]: b
Out[212]: <5x3 sparse matrix of type '<class 'numpy.bool_'>'
           with 3 stored elements in Compressed Sparse Row format>

但是当我根据内存使用情况检查它们的大小时,我发现它们都只有56个字节:

In [213]: from sys import getsizeof
          'Size of a: {}. Size of b: {}'.format(getsizeof(a), getsizeof(b))
Out[213]: 'Size of a: 56. Size of b: 56'

为什么这些矩阵的大小是相同的,而矩阵'a'必须比矩阵'b'存储超过20万倍的值?

1 个答案:

答案 0 :(得分:1)

这是一个小型演示:

from scipy import sparse

M = sparse.random(10**4, 10**3, .001, 'csr')

def sparse_memory_usage(mat):
    try:
        return mat.data.nbytes + mat.indptr.nbytes + mat.indices.nbytes
    except AttributeError:
        return -1
In [140]: sparse_memory_usage(np.random.rand(100, 100))
Out[140]: -1

In [141]: M = sparse.random(10**4, 10**3, .001, 'csr')

In [142]: sparse_memory_usage(M)
Out[142]: 160004

In [144]: M
Out[144]:
<10000x1000 sparse matrix of type '<class 'numpy.float64'>'
        with 10000 stored elements in Compressed Sparse Row format>