Pythonの最大の弱点である遅さを克服する方法を,初心者向けのレベルでまとめました.
Cython/Numba/ctypes/pybind11解説(PDF,67ページ,787KB)
これはPython3ライブラリブックの抜粋です.
処理内容や使い方によってはC言語に匹敵する速度が得られます.
NumPyによるベクトル化の対象とならないような,for,whileによる反復処理も,数値演算なら十分な速度が出せるようになりました.
4つの方法について解説しています.
・Cython:
Pythonに近い「Cython言語」で記述したプログラムをC/C++のソースコードに変換してコンパイルし,通常のPythonからimport可能な「拡張モジュール」にする.
・Numba:
最適化を指示するデコレータを関数定義に付加すると,JITコンパイラ(LLVM)によってその関数が機械語に変換される.利用方法は最も手軽.通常は最初の呼び出し時にコンパイルが行われるため,性能測定などではあらかじめ一度ウォームアップ実行する.
特にNumPyと組み合わせると,顕著に高速化されることがある.
・ctypes:
C言語などで作った動的ライブラリ(WindowsのDLLやLinuxの.soファイルなど)をPythonプログラムから読み込んで利用する仕組み.C ABIを介して,C言語で書かれた関数をPythonから呼び出すことができる.
・pybind11:
C++で作られた関数やクラスをPythonから自然に利用できるようにする仕組み.C++側にPythonとの接続用のラッパを記述し,通常のPythonからimport可能な拡張モジュールを作成する.クラスやSTLなどを含むPythonとC++の高度な連携が可能になる.
C/C++言語の入門書もこちらで公開しています.