2011-05-11 87 views
1

我試圖執行此代碼:內存錯誤()

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

回答

2

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