2011-05-11 10 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が不足しているためだと思いました私は48GbのRAMを搭載したPCで試しましたが、同じエラーが発生しました。 NumPy.arrayの最大サイズに達しましたか?

+1

64ビットオペレーティングシステム? – tillsten

+0

私はそれをWindowsの64ビットOS上で実行しますが、Pythonはこれに対処していないようです... –

答えて

2

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ギガバイトは、メモリの有限ammountであることを、およびオペレーティング・システム(あるいはハードウェアプラットフォーム)が制限される場合がありますことをご注意1つのプロセスのサイズは4 GBです。

+0

@Sven:Pythonプロセスを実行すると、5.85 GB(別のModelicaシミュレーションで使用)から7.40 GB 48GBの)その後、私はMemoryErrorを取得しました。これは、プロセスが「1.55GB」しか使用しないことを意味します。 –

+0

@rubae:これはあなたのメモリが足りなくなっていることを賞賛しません。プロセスが1.55GBを使用し、3GBを割り当てようとすると、プロセスが4GBに制限されていると、 'MemoryError'が発生します。私は、 'hstack()'が作成しようとしている配列のサイズを示すループにデバッグ出力を追加することをお勧めします。 –

+0

@Sven:ああ、ちょうど私が64bitコンピュータ上でPython(x、y)/ Spyderの32bit版を使用していることを知りました。おそらく問題は64bit版をインストールすることで解決されます... –

関連する問題