我有一个相当大的稀疏矩阵 A
,它是一个scipy.sparse.csr_matrix类型。 它具有以下属性:
A.shape: (77169, 77169)
A.nnz: 284811011
A.dtype: dtype('float16')
现在我需要使用.toarray()
将其转换为稠密数组。我对内存使用的估计是
77169**2 * (16./8.) / 1024.**3 = 11.09... GB
由于我的计算机有约48GB的内存,因此这应该是可行的。事实上,如果我创建a=np.ones((77169, 77169), dtype=np.float16)
,那么这个操作可以正常工作,而且a.nbytes/1024.**3 = 11.09...
。然而,当我在稀疏矩阵上运行A.toarray()
时,它会占用所有内存并开始使用交换空间(它不会引发MemoryError
)。这里出了什么问题?难道它不应该轻松地适合我的内存吗?
import scipy; print(scipy.__version__)
来检查。 - Warren Weckesser