Edited at

【備忘録】Python計算高速化(するかもしれない)モジュール"Numba"関連まとめ


Pythonプログラムを高速に回したい!

「10倍速く計算できれば,10倍多くの失敗ができる」

そう考えたら速い計算をできたらいいなと誰しもが考えるはず.

表題のNumbaですが,JIT(just-in-time)コンパイラを使ってPython上の計算を高速化できるというモジュールです.

このNumbaに関する過去の優れた記事たちを備忘録としてまとめたものがこの記事となります.

以下に簡単にNumbaについて記載しておきます.

Pythonにおいてfor文は遅延の原因であり,内包表記などで速くできます.

しかし,どうしてもfor文を(特に複数回)使うような状況はあるでしょう.

Numbaは import numba および @numba.jit のたった2文でfor文を高速化できるかもしれないツールです.

Numbaでサポートされている関数のリストはこちらにあります.

Numpy Support in numba

詳しく見ると add subtract などの四則演算や exp log10 sqrtなどの簡単な関数,

sin cos tan などの三角関数が対応されています.

しかし fft やら多くの計算は対応できないのが現状です(というか原理的に無理?).

(※速くならないだけで計算ができないわけではない)

本来なら速く計算可能な内包表記や,空のリストがnumbaでは計算できません.

その辺は定義した関数を細かくバラしてnumbaを利用できそうなところに使うことになりそうです.

ということで,

・簡単な計算を何度も行う

・複数のfor文を回す

といったときには高速化されるかも?というのがNumbaです.

もともと高速に計算可能なNumpyを活かすために,for文と上手に付き合う必要があると言えます.

以下にNumbaに関する内容を取り扱った記事をまとめています.

100万倍速いプログラムを書く

http://qiita.com/Akai_Banana/items/48a35d2a40d1804d3b32

Python: Numbaによる高速化

http://dr-kayai.hatenablog.com/entry/2014/10/09/175456

NumPyでfor文を使うと遅いと思ったがそんな事はなかったぜ

http://qiita.com/termoshtt/items/d6cf43e777946b3c1d93

PythonコードをNumbaで高速化したときのメモ

http://qiita.com/toyolab/items/b5d95bd38b3c7c66b510

JITコンパイラライブラリNumbaを使ってPythonコードを劇的に高速化する方法

http://myenigma.hatenablog.com/entry/2017/03/02/155433

pythonを速くしたいときにやったこと -Numba編-

http://qiita.com/open_cans/items/b6cde6c28f8eacba0ca1

初心者のPythonが速くなる〇〇の方法【numpyとか】

http://qiita.com/yukkyo1222/items/df4487bbc2767c630247

Python3.5 でNumbaをインストールして使ってみた

http://qiita.com/fujibo/items/9a776e671170137d7ade

Pythonのコードを高速化(はじめてのNumba)

http://fjkei.hatenadiary.jp/entry/2015/06/21/121251o

Pythonによる反応拡散シミュレーションをJITで高速化

https://qiita.com/kaityo256/items/3c07252ab63591256835