4

私の pygame ゲームで高価な関数 (たとえば、A* パスファインディング) を見つけて、ここで概説されているように拡張機能として書き直すことは可能ですか?

そうすることで速度の利点はありますか?より良い(python)ソリューションはありますか?

私がこの質問をするのは、関係のない理由で C の学習を始めたばかりだからです。Python と pygame に戻ったときに、これは良い考えかもしれません。

4

2 に答える 2

8

そうすることでスピードのメリットはありますか?

あなたがしていることが正確に何であるかを知らずに言うことは不可能ですが、一般的な答えは「非常に可能性が高い」です。

より良い(Python)ソリューションはありますか?

繰り返しますが、言うことは不可能です。正確には何よりも優れていますか?

数値配列を使用している場合、最初のステップはおそらくNumPyを使用することです。

それが済んだら、raw Cで拡張機能をコーディングする以外に、処理を高速化するための複数の方法があります。

  • Cython:Pythonのような言語で拡張機能を記述します。
  • numexpr:配列式の高速評価エンジン。

最後に、CまたはC ++拡張機能を作成していることに気付いた場合は、 SWIGまたはBoost.Pythonの使用を検討してください。

于 2012-05-24T13:30:22.847 に答える
4

cProfile を使用して、コード内の最も高価な関数を見つけることができます。コードの一部を C に移行すると、パフォーマンスが改善されると確信しています。私のテストでは、コードに応じて 2 倍から 200 倍の改善が見られます。

これを実現する最も簡単な方法は、高価な関数を別のモジュールに移動し、変数宣言を追加して Cython でコンパイルすることです。それらは Python モジュールであるため、メイン プログラムにインポートできます。

プロファイリングや Cython など、コードを最適化するために使用できるさまざまな方法に関する優れたチュートリアルを次に示します。

http://ianozsvald.com/HighPerformancePythonfromTrainingatEuroPython2011_v0.2.pdf

于 2012-05-24T13:41:44.113 に答える