在(相对)小矩阵上获得numpy内存错误

时间:2015-09-25 19:28:45

标签: python numpy memory

我正在尝试创建一个具有某些维度的numpy数组,但是我遇到了内存错误。

no_of_frames = 1404 
no_of_cells = 136192
original_vals = np.zeros((no_of_frames, no_of_cells), dtype=np.float32)

我得到的错误是:

difference_array = np.zeros((no_of_frames, no_of_cells), dtype=np.float32)
    MemoryError

根据我的计算1404 x 136192 * 4是~729 MB。这似乎很合理。我运行此代码的机器有8 GB的RAM。那我为什么会收到这个错误?

我非常感谢任何帮助。谢谢!

2 个答案:

答案 0 :(得分:1)

我刚尝试了你在我的4GB机器上提供的代码没有问题:

Python 3.4.3 (v3.4.3:9b73f1c3e601, Feb 24 2015, 22:43:06) [MSC v.1600 32 bit     (Intel)] on win32
Type "copyright", "credits" or "license()" for more information.
>>> no_of_frames = 1404
>>> no_of_cells = 136192
>>> import numpy as np
>>> original_vals = np.zeros((no_of_frames, no_of_cells), dtype=np.float32)
>>> original_vals+=1
>>> 

然后我执行了计算(original_vals + = 1),花了大约10秒,但也成功了。所以我不知道这是否是一个python问题。你在win32,win64,linux或其他系统上工作吗?

答案 1 :(得分:1)

如果您使用32位python,则限制为32位地址空间(~2GB)

如果你还有其他东西,你可能会超过这个限制

另外numpy需要连续的内存空间才能创建它的列表...这意味着它必须找到一个不间断的768MB ram块(这有点难)