Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
42
Help us understand the problem. What is going on with this article?
@shaka

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

More than 3 years have 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)
で確認できるようだ

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

42
Help us understand the problem. What is going on with this article?
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
shaka
ヒト科ヒト属データサイエンティストモドキ

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
42
Help us understand the problem. What is going on with this article?