サブロウ丸

Sabrou-mal サブロウ丸

主にプログラミングと数学

Cython その1

Cythonを使ってPythonのコードを高速化します。

Cythonのインストール

pip3 install cython


コンパイル

cythonのインストールが終わったら、スクリプトc言語コンパイルするために、以下のsetup.pyを用意します。

(ext_modules = [Extension('tsp', ['tsp.pyx'])]のExtensionの中身はコンパイルするスクリプト名によって随時書き換えます。)


コンパイルの手順としては、
1. 対象スクリプトの拡張子をリネーム(.py -> .pyx)
1-α. cython用にスクリプトを書き換える(さらなる高速化のため)
2. python3 setup.py build_ext --inplaceを実行
です。


(手順1) まず、前回の記事のtsp.pyをtsp.pyxにリネームします。(関数以外の部分は消しています)


次にとりあえず手順1-αをすっ飛ばして手順2のpython3 setup.py build_ext --inplaceを実行します。

すると、以下の2つのファイルが生成されます。
・tsp.cpython-35m-darwin.so
・tsp.c

これらができていたらコンパイルは無事終了です。pyhtonの対話モード等でimport tspでtsp関数の読み込みができます。

(注意)
tsp.cpython-35m-darwin.soはコンパイルを実行した環境に依存しているので、
使用する環境下でそれぞれコンパイルをする必要があります。



これでどれだけ速くなっているかというと

20ノードからなるグラフで計測

プログラム 計測時間(s)
もともと 49.59 1
コンパイル済み 41.91 0.85


これだけでも高速化はできていますが、 変数に静的な型付けを行うことでさらに高速化することができます。(というか、これがcythonのメイン)

それはまた次の記事で。