我正在尝试创建一个具有某些维度的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。那我为什么会收到这个错误?
我非常感谢任何帮助。谢谢!
答案 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块(这有点难)