Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

前置き

http://qiita.com/open_cans/items/f180ae4dc945dc7b9066
この記事の続きです。
主にミリ秒とかマイクロ秒まで気にする人向けに書いています。

numbaとは

numbaとはpythonのコードをjitコンパイラでコンパイルして速くするやつ
すごく手軽に高速化できるかなりすごい奴

numbaの使用例

sample.py
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文に書き換えなくてはいけない

空リストは使えない

sample.py
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)
で確認できるようだ

もし対応していない場合はその関数をスクラッチで書いてしまおう
そうすると高速化の恩恵を得ることができる。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away