Python 2.7を使って拡張可能なアプリケーションのプラグインを書く必要があります。これは、整数の直角行列上で動作する、かなり複雑な動的アルゴリズムを実行する必要があります。PythonでCの拡張子を持たない高速の2次元配列(行列)
そのアプリケーションに付属するデフォルトのPythonインストールにはnumpyのような数値ライブラリが含まれていないので、残念ながらPythonのstdlibだけを使用して実装する必要があります。
Iメモリに行列を表すために、いくつかの異なるアプローチを試みた:
values = defaultdict(int)
values = [[0 for _ in range(width)] for _ in range(height)]
values = [0] * (width * height) # access like values[j*width + i] later
values = [[0] * width for _ in range(height)]
辞書アプローチは完全性のためにだけ存在し、すべての要素がアクセスされるので、それは実際には非常に有益ではありません。
私の測定では、最後のものがビルドとアクセスが最も速いようです。しかし、私は組み込みの行列機能がないことに驚いています。これまでに私がPythonについて学んだことから、stdlibで明白な機能が見つからない場合は、あなたが一生懸命見ていない可能性が最も高いでしょう。
これは、例えばarray
モジュールや私が気付いていない他の機能を使って、これをさらに最適化できるかどうか疑問です。
ボトルネックがデータ構造のチョイスですか? –
@Sven:はい、アルゴリズムは基本的にはマトリックスの値を比較して変更します。タプルインデックス付きの辞書からリストのリストに切り替えると、パフォーマンスが約50%向上しました。プロファイリング( 'kernprof'を使用)は、マトリックスからの値の取得と設定を使用して、ほとんどの時間が必要であることを示しています。 –