Python:lil_matrix vs csr_matrix在极大的稀疏矩阵中

时间:2015-09-23 15:24:20

标签: python sparse-matrix

我想逐步构建一个非常大的稀疏矩阵。问题是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。

1 个答案:

答案 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