「配列操作」を処理するときにかなり高速なnumpyもあります(ベクター操作と呼ばれることもありますが、その用語はSIMD用語と混同しています)。cython ルートに進むことにした場合は、おそらく numpy が必要になるため、アルゴリズムがそれほど複雑でない場合は、最初に numpy だけで十分かどうかを確認することをお勧めします。
ここで取ることができる 2 つの異なるルートがあることに注意してください。使用できますsubprocess
これは基本的に、作成した他のプログラムにシステム コールを発行します。新しいプロセスを開始してデータをプロセスに送信し、プロセスからデータを読み戻す必要があるため、これは低速です。つまり、データは呼び出しごとに複数回複製されます。2 番目のルートは、Python から C 関数を呼び出すことです。Cpython (参照および最も一般的な python 実装) は C で記述されているため、C 拡張機能を作成できます。これらは基本的に、特定の API に準拠するコンパイル済みライブラリです。次に、Cpython はそれらのライブラリをロードし、内部の関数を使用して、データへのポインターを渡すことができます。この方法では、データは実際には複製されません。C で使用しているのと同じメモリ ブロックを Python で使用しています。ここでの欠点は、C API が少し複雑であることです。それか' サードパーティの拡張機能と既存のライブラリ (numpy、cython、ctypes など) が入る場所。それらはすべて、C API について心配することなく、C 関数に計算をプッシュするさまざまな方法を備えています。Numpy はループを削除するため、配列をすばやく加算、減算、乗算できます (他の多くのことの中でも)。 Cython
PythonコードをCに変換し、コンパイルしてインポートできます-通常、ここで速度を上げるには、cythonが生成されたコードを最適化できるようにする追加のヒントを提供する必要がありctypes
ます.C関数プロトタイプを再指定する必要があるため、少し壊れやすいです.それ以外の場合は、ライブラリを共有オブジェクトにコンパイルできる限り、非常に簡単です...リストは続く可能性があります。
また、numpy を使用していない場合は、pypy を確認してください。Cpython よりも高速に Python コードを実行できると主張しています。