内存错误()

问题描述:

我试图执行此代码:内存错误()

for i in Fil: 
    for k in DatArr: 
     a = np.zeros(0) 
     for j in Bui: 
      a = np.hstack([a,DatDifCor[k][i,j]]) 
     DatDifPlt[k].update({i:a}) 

但它给我这个错误:

Traceback (most recent call last): 
    File "<ipython console>", line 5, in <module> 
    File "C:\Python26\lib\site-packages\numpy\core\shape_base.py", line 258, in hstack 
    return _nx.concatenate(map(atleast_1d,tup),1) 
MemoryError 

我认为它缺乏的RAM是由于内存,但是之后我尝试在一台装有48 Gb内存的PC上运行,并给出了相同的错误。我是否已达到NumPy.array的最大尺寸?

+1

64位操作系统? – tillsten 2011-05-11 14:24:30

+0

我在Windows 64位操作系统上运行它,但python似乎不能应付这个... – 2011-05-12 09:10:52

A MemoryError总是意味着尝试分配内存失败。试图创造一个ValueError比最大数组大小的结果更大的数组:

>>> a = numpy.arange(500000000) 
>>> numpy.hstack((a, a)) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/usr/lib/pymodules/python2.6/numpy/core/shape_base.py", line 258, in hstack 
    return _nx.concatenate(map(atleast_1d,tup),1) 
ValueError: array is too big. 

注意,48 GB也内存有限ammount的,和你的操作系统(甚至硬件平台)可能会限制单个进程的大小为4 GB。

+0

@Sven:我运行的Python进程将5.85 GB(由不同Modelica模拟使用)的RAM使用增加到7.40 GB(out 48 GB)之后,我得到MemoryError,这意味着该过程使用'仅'1.55 GB ... – 2011-05-11 14:23:48

+0

@rubae:这并不意味着您的内存不足。如果进程使用1.55 GB并尝试分配3 GB,则如果进程限制为4 GB,则会出现“MemoryError”。我建议在循环中添加一些调试输出,以显示'hstack()'将要创建的数组的大小。 – 2011-05-11 14:26:31

+0

@Sven:嗯,我刚刚发现我在64位计算机上使用了Python(x,y)/ Spyder的32位版本,也许问题是通过安装64位版本解决的... – 2011-05-11 14:50:30