2016-05-10 8 views
-4

私のpythonプログラムのパフォーマンスに関する質問があります。書き留められた部分は非常に重要で、私はすでにnumpyでパフォーマンスを向上させました。この部分をさらに高速化できるかどうかを知りたいですか? 10倍のスピードアップがすでにいいだろう。..Pythonのパフォーマンス

u = numpy.zeros((a**l, a**l)) 
re = numpy.zeros((a**l, a**l, a**l)) 
wp = numpy.zeros((a**l, 2)) 
...Some code which edits u,re and wp... 
for x in range(N): 
    wavg = numpy.dot(wp[:, 0], wp[:, 1]) 
    wp[:, 0] = 1.0/wavg*numpy.dot(u, numpy.multiply(wp[:, 0], wp[:, 1])) 
    wp[:, 0] = numpy.tensordot(numpy.tensordot(re, wp[:, 0], axes=1), wp[:, 0], 
    axes=1) 
+4

このコードについて何か教えていただけますか?あなたはどこでそれを実行しているのですか、何をしていますか、どのような入力データを持っていますか? – TigerhawkT3

+1

私は[codereview.se]を提案します – zondo

+5

これは、トピックに含まれているので、 .se]。既に動作しているコードの最適化に関する質問は、スタックオーバーフローに関するトピック外です。 – MattDMo

答えて

0

私はCythonCPythonよりもう一つは...)との素晴らしい経験をしました。あなたは普通のコードCをプログラムから作り出し、それを拡張モジュールにコンパイルし、別のPythonファイルから実行するだけです。 numpyHow to create a .pyd file?などの拡張機能のビルドの詳細については、この質問をご覧ください。

サンプル:

、例えばあなたのコードは、(他のすべてのプラットフォーム上でWindows、.so.pyd)拡張にコンパイルしていると仮定すると、 myext.pydとその中の機能myfunc()、あなたはこのようにそれを実行することができます:

import myext 
myext.myfunc() 

ザ・Pythonのインタプリタはこの小さなコードスニペットを実行する、拡張ロード(バイトコードがC -codeから作られ、速いでしょう!)通常のPythonコードよりもはるかに速くあらゆる関数を実行できます。

Windowsにコンパイラをインストールする必要があります。gccは、ほとんどのLinux/Unixシステムに既に組み込まれています。 Python 2.7用の特別なコンパイラパッケージがありますが、これはPython 3.xでは動作しません。 WindowsではMinGWgccのポートは問題なく使用できます。

時々Cythonは、約300行のPythonコードから15KラインCコードを生成することについては疑問はありません:)

あなたには、いくつかのより多くの質問があるか、行う方法の詳細な説明が必要な場合は聞いてお気軽にそれ。 の作業 Pythonの拡張はそれほど簡単なものではありません。

希望に役立ちます!

+0

私はいくつかの編集を行った、役に立つ情報かもしれない – linusg

関連する問題