12

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

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

a = 10000000000
data = np.array([float('nan')] * a)

毫不奇怪,这让我很震惊MemoryError

有两件事我想告诉你:

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

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

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

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

Python/Numpy 内存错误

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

PS显然我对数字的乘法和除法有些问题,这让我觉得我有足够的内存。所以我想是时候睡觉了,复习数学,可能是买一些内存。

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

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

4

3 回答 3

28

假设每个浮点数是 4 个字节,你会有

(10000000000 * 4) /(2**30.0) = 37.25290298461914

或者您需要存储在内存中的 37.5 GB。所以我认为 24​​gb 的 RAM 是不够的。

于 2013-09-30T00:56:32.350 回答
6

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

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

于 2014-03-27T09:45:37.703 回答
1

如果您使用 python 的 pycharm 编辑器,您可以更改内存设置

C:\Program Files\JetBrains\PyCharm 2018.2.4\bin\pycharm64.exe.vmoptions

您可以从此文件降低 pycharm 速度,以便程序内存分配更多兆位,您必须编辑此代码

-Xms1024m
-Xmx2048m
-XX:ReservedCodeCacheSize=960m

所以你可以让它们 -Xms512m -Xmx1024m 最后你的程序可以工作,但它会影响 pycharm 中的调试性能。

于 2018-10-26T11:00:33.743 回答