長い間C++の開発者私はPythonでアルゴリズムの作業を開始しました。私は現在、コードをプロファイリングして、Pythonで効率的にプログラムする方法を感じています。特に私は専門家の説明を得ることが非常にうれしいです。Python要素のアクセス性能
私はレイ・トライアングル交差点のために、このラッパー関数を書いた:
def rayIntersectsTriangle(origin , direction , meshData , poly , worldCoordinateVertices):
return mathutils.geometry.intersect_ray_tri(worldCoordinateVertices[ meshData.loops[ poly.loop_start ].vertex_index ],
worldCoordinateVertices[ meshData.loops[ poly.loop_start + 1 ].vertex_index ],
worldCoordinateVertices[ meshData.loops[ poly.loop_start + 2 ].vertex_index ],
direction , origin) != None
を(cProfileを使って)この関数に多くの時間を実行するコードをプロファイリングすると、私は次のような結果があります。
ncalls tottime percall cumtime percall filename:lineno(function)
15694126 22.314 0.000 25.812 0.000 ****.py:176(rayIntersectsPoly)
[...]
15694126 3.497 0.000 3.497 0.000 {built-in method mathutils.geometry.intersect_ray_tri}
を
このラッパーはどうしてそんなオーバーヘッドを追加しますか?私がここで実際に見ることができる唯一のことは、配列要素へのアクセスです。 C++から来て、これは私を本当に混乱させます:D
これについての助言は非常に高く評価されます。アルゴリズムをできるだけ速くしたいのですが。
ありがとうございます!乾杯!
https://wiki.python.org/moin/TimeComplexity –
...とbtwを参照してください。数学中心のワークロードでの実行時パフォーマンスが最重要課題である場合、Pythonはあなたのための言語ではないかもしれません。 [Julia](https://julialang.org/)や[Go](https://golang.org/)をお勧めしますか? (ベンチマークはジュリアのページの両方をカバーする)。 –
素晴らしいです。リソースに感謝します。私は現在、Blenderのプラグインに取り組んでいますので、Pythonに代わるものはありません。 – Marcel