2016-10-25 3 views
1

python script.pyまたはpython3 script.pyのいずれかを使用してPythonコードを実行しています。 (最初のものは2.7に基づいており、2番目のものは3.4に基づいています)。しかし、最近、私は計算コストの点でかなり厳しいコードに取り組んでいます。私はPythonの専門家ではなく、Python 2.7と3.4の両方のバージョンと互換性のある他のルーチンをたくさん使用しています。コード内にある私の関数の入力ファイル.hdf5が1 Mbiのオーダになると、コードは実行されており、結果はゆっくりと生成されます。機能の.hdf5入力ファイルが1 GBIのオーダーであるときには、コードが最後まで進んことはほとんどないし、私は「MemoryError:」で終わるのです。このウェブサイト上のいくつかの検索を行った後なぜpypyは私のpython 2.7/3.4モジュールとパッケージを認識していませんか?

Traceback (most recent call last): 
    File "myscript.py", line 29, in <module> 
    gizmo.analysis.Image.plot_image(part, 'gas', 'mass.hydrogen.neutral', 'histogram', [0,1],[0,1,2], distance_max, distance_bin_width_Gas, distance_bin_number, part_indices=part_indices, write_plot=write_plot, plot_directory=plot_directory, background_color=background_color, use_column_units=True) 
    File "/home/username/Desktop/Projects/PaperMaterials/DM_Dominated_Objects/NewFolder2/covering_fractions/Simulations/gizmo/gizmo_analysis.py", line 817, in plot_image 
    weights = part[spec_name].prop(weight_prop_name, part_indices) 
    File "/home/username/Desktop/Projects/PaperMaterials/DM_Dominated_Objects/NewFolder2/covering_fractions/Simulations/gizmo/gizmo_io.py", line 145, in prop 
    self.prop(property_name.replace('mass.', 'massfraction.'), indices)) 
    File "/home/username/Desktop/Projects/PaperMaterials/DM_Dominated_Objects/NewFolder2/covering_fractions/Simulations/gizmo/gizmo_io.py", line 157, in prop 
    values = (1 - self.prop('massfraction', indices)[:, 0] - 
    File "/home/username/Desktop/Projects/PaperMaterials/DM_Dominated_Objects/NewFolder2/covering_fractions/Simulations/gizmo/gizmo_io.py", line 65, in prop 
    return self[property_name][indices] 
MemoryError 

私はpypyを使ってPythonコードを実行することができることに気づいた。私はリポジトリにpypy 2.4バージョンが付属しているFedora 21(32ビット)OSを使用しているので、このバージョンのpypyを正常にインストールすることができました。私は、コマンドラインの代わりに、上記のもののpypy myscript.pyを使用して、私のコードを実行しようとすると、しかし、私はエラーメッセージが残っています:

File "app_main.py", line 75, in run_toplevel File "myscript.py", line 1, in import numpy as np ImportError: No module named numpy

それはこの含めた全てのPythonモジュールやパッケージを認識しないことpypyです特定のもの。

私がFedora 21 Linuxディストリビューションに固執して、すべてのPythonモジュールとパッケージがpypyによって認識され、より高速なコードになるという事実を考えれば、私にとってあなたの最高の提案は何ですか?

投稿することができますmyscript.pyですが、それは私がそれで他のルーチンをたくさん使用しているという事実を与えられたすべてに役立つかどうかわかりません。

答えて

1

PyPy 2.4はnumpyをサポートしていないかなり古いバージョンです(別途インストールしようとしても)。

いずれの場合でも、PyPyのまったく新しいバージョンでさえnumpy重いプログラムのメモリ使用量を減らすことはほとんどありません。

32ビットOSでは、1つのプロセスで1〜3GBのデータの規模でMemoryErrorを実行している場合は、64ビットOSが必要であることがわかります。

+0

短期間ではあるが、32ビットオペレーティングシステムがメモリをゆっくり管理することができるように、(入力データの最小限の機能に応じて).hdf5ファイル内のすべての内容を読み込まないことで、最終結果の精度を損なうことはありません。しかし、私はもはやその問題を抱えていない、長期的には64ビットOSに移行する必要がありました。 – Allan

+1

Python 2.7用のものをインストールするのが自動的にPython 3.4で利用できないように、PyPy専用のすべてのパッケージをインストールする必要があるという正確な質問に私は答えなかったことに気付きました。 "pypy -m ensurepip"を使い、次に "pypy -m pip install NAME"を使って、配布物の代わりにPython独自のパッケージシステムを使用します(後者は、pypy用のモジュールを多く含んでいない可能性が高いためです)。 –

関連する問題