前置き
http://qiita.com/open_cans/items/f180ae4dc945dc7b9066
この記事の続きです。
主にミリ秒とかマイクロ秒まで気にする人向けに書いています。
numbaとは
numbaとはpythonのコードをjitコンパイラでコンパイルして速くするやつ
すごく手軽に高速化できるかなりすごい奴
numbaの使用例
import numba
@numba.jit
def sumation(num):
sum=0
for i in range(num):
sum += i
return sum
sum = sumation(100)
print(sum)
3行目のように関数の前に
@numba.jit
と書くだけ
ここまでお手軽で高速化できるなんてすごい!!
numbaの注意点
手軽でいいんだけど使う際に注意してほしいことがいくつかあるので列挙する。
内包表記は使えない
前回の記事で内包表記最高みたいに書いてたけどnumbaでは使えない。
いないと思うけど前の記事をみて内包表記をガリガリ書いていたら内包表記からfor文に書き換えなくてはいけない
空リストは使えない
import numba
@numba.jit
def inputList(num):
temp=[]
temp.append(num)
return sum
sum = inputList(100)
print(sum)
こんな風に書くとエラーが出る
temp=[]が原因となっている
コンパイルするときの注意点
そもそも動かない関数に@numba.jitと書いてしまうとエラーが隠蔽されてしまったりしてよくわからないことになるので必ず確実に動くことを確認してから@numba.jitと書いてほしい
numbaとnumpyを組み合わせるときの注意点
numpyを使っている関数をnumbaで高速化しようとしても時々高速化できていないことがある。
どうやらnumbaもnumpyの関数でサポートしていないものもあるらしい
この記事(http://nekowarau.seesaa.net/article/428663212.html)
によるとnumbaが対応しているnumpyの関数は(http://numba.pydata.org/numba-doc/0.14/numpy_support.html)
で確認できるようだ
もし対応していない場合はその関数をスクラッチで書いてしまおう
そうすると高速化の恩恵を得ることができる。