Numpy内存错误创建巨大的矩阵

Sal*_*ali 11 python memory numpy

我正在使用numpy并试图创建一个巨大的矩阵.执行此操作时,我收到内存错误

因为矩阵并不重要,所以我将展示如何轻松重现错误的方法.

a = 10000000000
data = np.array([float('nan')] * a)
Run Code Online (Sandbox Code Playgroud)

毫不奇怪,这引起了我的兴趣 MemoryError

我想说两件事:

  1. 我真的需要创建并使用一个大矩阵
  2. 我想我有足够的RAM来处理这个矩阵(我有24 Gb或RAM)

是否有一种简单的方法来处理numpy中的大矩阵?

为了安全起见,我之前阅读过这些帖子(听起来很相似):

使用Python和NumPy的非常大的矩阵

Python/Numpy MemoryError

在python中处理一个非常大的数据集 - 内存错误

PS显然我在数字的乘法和除法方面存在一些问题,这让我觉得我有足够的记忆.所以我觉得是时候睡觉了,复习数学,也许是为了买些记忆.

也许在这段时间里,一些天才可能想出如何使用仅仅24 Gb的Ram实际创建这个矩阵.

为什么我需要这个大矩阵 我不会对这个矩阵进行任何操作.我需要做的就是把它保存到pytables中.

Eri*_*ban 25

假设每个浮点数每个都是4个字节,那么你就有了

(10000000000 * 4) /(2**30.0) = 37.25290298461914
Run Code Online (Sandbox Code Playgroud)

或者你需要在内存中存储37.5千兆字节.所以我不认为24GB的RAM就足够了.


Tig*_*uev 6

如果您负担不起创建这样的矩阵,但仍希望进行一些计算,请尝试使用稀疏矩阵

如果您希望将它传递给另一个使用duck typing 的Python 包,您可以创建自己的类并__getitem__实现虚拟访问。