我想逐步构建一个非常大的稀疏矩阵。问题是lil_matrix
占用了大量内存,效率低下。例如,如果我想创建一个2000万x 2000万lil_matrix
,它将完全打开我的RAM。另一方面,csr_matrix
几乎没有空间。但是,csr_matrix
据称对修改效率低下。有没有其他方法可以在不占用RAM空间的情况下获得lil_matrix
的好处?另外,为什么它首先占用了这么多空间,因为它应该是一个稀疏矩阵?
注意:真正的问题实际上并没有创建如此庞大的矩阵,而是创建了以下list
:
list = [sp.lil_matrix((150,150)) for i in range(1000)]
这也炸毁了我的RAM。
答案 0 :(得分:2)
我没有声称拥有完整的答案,但如果你看一下矩阵的内部结构,我就会觉得你会到达那里。
In [12]: s = sparse.csr_matrix((5,5))
In [13]: s.__dict__
Out[13]:
{'_shape': (5, 5),
'data': array([], dtype=float64),
'format': 'csr',
'indices': array([], dtype=int32),
'indptr': array([0, 0, 0, 0, 0, 0], dtype=int32),
'maxprint': 50}
In [14]: s.indptr.nbytes
Out[14]: 24
In [15]: l = sparse.lil_matrix((5,5))
In [16]: l.__dict__
Out[16]:
{'_shape': (5, 5),
'data': array([[], [], [], [], []], dtype=object),
'dtype': dtype('float64'),
'format': 'lil',
'maxprint': 50,
'rows': array([[], [], [], [], []], dtype=object)}
In [17]: l.data.nbytes
Out[17]: 40
In [18]: l.rows.nbytes
Out[18]: 40