具有大稀疏矩阵的MemoryError

时间:2014-11-28 18:00:16

标签: python numpy scipy

对于一个项目,我构建了一个构建大型矩阵的程序。

def ExpandSparse(LNew):
SpId = ssp.csr_matrix(np.identity(MS))
Sz = MS**LNew
HNew = ssp.csr_matrix((Sz,Sz))
Bulk = dict()
for i in range(LNew-1):
    for j in range(LNew-1):
        if i == j:
            Bulk[(i,j)]=H2
        else:
            Bulk[(i,j)]=SpId
Ha = ssp.csr_matrix((8,8))
try:
    for i in range(LNew-1):
        for j in range(LNew-2):
            if j < 1:
                Ha = ssp.csr_matrix(ssp.kron(Bulk[(i,j)],Bulk[(i,j+1)]))
            else:
                Ha = ssp.csr_matrix(ssp.kron(Ha,Bulk[(i,j+1)]))
        HNew = HNew + Ha
except MemoryError:
    print('The matrix you tried to build requires too much memory space.')
    return
return HNew

这可以完成这项工作,但是它没有像我预期的那样有效。问题是它不允许使用非常大的矩阵。当LNew大于13时,我将得到MemoryError。我对numpy的体验表明,在记忆中,我应该能够在得到此错误之前将LNew提升到18或19。这与我的代码有关,还是与scipy.sparse.kron()与这些矩阵一起使用的方式有关?

另一个可能很重要的注意事项是我使用Windows而不是Linux。

1 个答案:

答案 0 :(得分:0)

在对scipy.sparse.kron()函数的工作进行了一些阅读之后,我注意到你可以输入第三个名为format的术语。默认设置为None,但是当它被置于'csr'或其他支持的格式时,它将仅使用稀疏格式使其更高效,现在对我来说它可以构建一个2097152 x 2097152矩阵。这里LNew是21。