windows python にcython とNumba 入れてみた。

前提環境

以下の手順で導入しています。Cコンパイラも入れていおてください。
windowsのバージョンは、1809です。
アナコンダは知らん


インストール手順
Python3のインストール
Python 3.x の公式パッケージをダウンロードし、インストールします。
Cコンパイラのインストール (オプション)
Pythonの拡張パッケージをインストールするときに、Cコンパイラが必要となる場合があります。
Windows環境では、Cコンパイラが添付されていないので、必要に応じてインストールします。

https://www.python.jp/install/windows/index.html

また、パワーシェルでパスが通っているとします。

PS C:\Users\PCUser> python
Python 3.7.1 (v3.7.1:260ec2c36a, Oct 20 2018, 14:57:15) [MSC v.1915 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.

モジュールのインストール

jupyterlabはcythonを手軽に使うことができます。また、開発もしやすくなるのでこれを入れます。

python -m pip install jupyterlab

Cythonをインストールします。

 
python -m pip install Cython

numbaをインストールします。

 
python -m pip install numba

インストールしたらインポートできるかを確認します。

PS C:\Users\PCUser> python
Python 3.7.1 (v3.7.1:260ec2c36a, Oct 20 2018, 14:57:15) [MSC v.1915 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import cython
>>> import numba
>>>

何もエラーが出ないのでこれでインストールできました。


jupyter-labを起動するスクリプトを作成します。ファイル名は
jupyter-lab.bat
とします。

@echo off
 
if not "%~0"=="%~dp0.\%~nx0" (
     start /min cmd /c,"%~dp0.\%~nx0" %*
     exit
)
jupyter-lab.exe --notebook-dir D:\Users\PCUser

--notebook-dir は作業フォルダを指定します。Cドライブ以外の場合は指定が必要です。起動するとブラウザが開きます。

タスクバーに黒いやつがありますが、jupyter-labが動いているので消さないでください。ブラウザでQuitすると消えます。

速さを比較してみる

自分でコードを書くのがだるいようでだるくなかったので、こちらから参考しました。

https://qiita.com/pashango2/items/45cb85390193d97523ca

%load_ext Cython
###セル区切り
import numba
###セル区切り
%%cython
def cy_fib(n):
    a, b = 0.0, 1.0
    for i in range(n):
        a, b = a + b, a
    return a
###セル区切り
def py_fib(n):
    a, b = 0.0, 1.0
    for i in range(n):
        a, b = a + b, a
    return a
###セル区切り
@numba.jit
def py_numba_fib(n):
    a, b = 0.0, 1.0
    for i in range(n):
        a, b = a + b, a
    return a
###セル区切り
%timeit py_fib(1000)
%timeit cy_fib(1000)
%timeit py_numba_fib(1000)
"""
63.3 µs ± 4.34 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)
12.3 µs ± 339 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
1.02 µs ± 10.3 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
"""

結果

numbaクソ早くて笑いました。cythonも早いけど。再帰が絡んでくるとどうなんでしょうね。