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

时间:2013-09-30 00:53:20

标签: python memory numpy

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

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

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

毫不奇怪,这引起了我MemoryError

我想说两件事:

  1. 我真的需要创建并使用大矩阵
  2. 我认为我有足够的RAM来处理这个矩阵(我有24 Gb或RAM)
  3. 是否有一种简单的方法来处理numpy中的大矩阵?

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

    Very large matrices using Python and NumPy

    Python/Numpy MemoryError

    Processing a very very big data set in python - memory error

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

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

    为什么我需要这个大矩阵 我不打算用这个矩阵做任何操作。我需要做的只是将它保存到pytables

3 个答案:

答案 0 :(得分:23)

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

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

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

答案 1 :(得分:4)

如果您无法负担创建此类矩阵,但仍希望进行一些计算,请尝试sparse matrices

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

答案 2 :(得分:1)

如果您将pycharm编辑器用于python,则可以从以下位置更改内存设置

  

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

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

-Xms1024m
-Xmx2048m
-XX:ReservedCodeCacheSize=960m

因此您可以将它们设置为-Xms512m -Xmx1024m,最后您的程序将运行 但这会影响pycharm中的调试性能。