如何在python中生成一个大的单一矩阵而不会遇到“内存已满”?

时间:2015-09-22 00:42:39

标签: python numpy

我正在使用以下代码:

n = 40000
numpy.matlib.identity(n)

1 个答案:

答案 0 :(得分:6)

您可以使用sparse matrix representation

来使用scipy执行此操作
import numpy as np
from scipy.sparse import identity
n = 30000
a = np.identity(n)
print a.nbytes
b = identity(n)
print b.data.nbytes

差异很大(二次方):7200000000 vs 240000

您还可以尝试通过提供适当的dtype来缩小尺寸,例如a = np.identity(n, dtype='int8'),但这只会线性缩小尺寸(最大线性系数小于200)。

b = identity(n, dtype='int8', format='dia')相同的方法可以将尺寸进一步缩小到30000

但是最重要的是你打算用这个矩阵做什么(非常怀疑你只想创建它)?有些操作不支持稀疏索引。然后你要么购买更多的内存,要么提出智能线性代数的东西来操作部分矩阵,将结果存储在磁盘上并将它们合并在一起。