VirtualBox 上のUbuntuでCythonを試してみた。
$ sudo apt-get install cython
$ cython -V
でバージョンの表示を確認する。
「Cython Cとの融合によるPythonの高速化」p3にあるCython版のフィボナッチ関数を
fib.pyxとして保存する。
# -*- coding: utf-8 -*-
def fib(n):
cdef int i
cdef double a=0.0, b = 1.0
for i in range(n):
a, b = a + b, a
return a
「Cython Cとの融合によるPythonの高速化」p15にあるsetup.pyをfib.pyxと同じディレクトリに置く。
from distutils.core import setup
from Cython.Build import cythonize
setup(ext_modules=cythonize('fib.pyx'))
$ python setup.py build_ext --inplace
を実行する。
Spyder統合環境でIPythonのコンソールを起動する。
in [1]: import fib
in [2]: fib.fib(1)
Out[2]: 1.0
in [3]:fib.fib(90)
Out[3]: 2.880067194370816e+18
in [4]: %timeit fib.fib(90)
10000000 loops, best of 3: 137 ns per loop
in [5]: import fib0
in [6]: %timeit fib0.fib(90)
100000 loops, best of 3: 4.78 µs per loop
この例では、CPU バウンドになっていることが、処理速度の大幅な向上につながっている。
各人の抱えている課題の中で、何がボトルネックになるかを調べて、Cythonを使う・使わない、別の手法を使うことを考えてみるのがよさそうである。
参考資料:
「Cython Cとの融合によるPythonの高速化」オライリー・ジャパン
追記:
以下のサイトにはRaspberryPiでCythonを動作させた手順が書いてあります。
「電子工作チュートリアル」1 Cythonをダウンロード
http://lumenbolk.com/?p=1054
付記:
scikit-learnやscikit-imageをソースコードからビルドしなくてはならないときもCythonを自覚することなくビルドの一部として実行することになるでしょう。まあ、そのような必要に迫られことはふつうないでしょう。たいがいの場合、pip installですむはずですから。