#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