コンテンツにスキップ

Python numbaを用いたPythonの高速化

  • numbaは、関数を最適化し、高速化することができるPythonライブラリ
  • LLVMコンパイラライブラリを用いて、Python関数を実行時に最適化されたマシンコードに変換する

Install

pip install numba

Usage

高速化したい関数に @jit デコレータを付ける

import numba

@numba.jit
def func(x):
    return x**2

2つのコンパイルモード

  • @jit
  • @jit(nopython=True)

@jitデコレータを指定してPython無しモードでのコンパイルに失敗した場合、オブジェクトモードで再度関数をコンパイルする(遅くなる)

@jit(nopython=True)でコンパイルに失敗した場合は、例外が発生する

高速化されないケース

  • リスト内包表記やジェネレータ式
  • 任意の長さの文字列を扱う文字列メソッド
  • 高階関数 (map、filter、reduce)
  • yield 文を含むジェネレータ

  • 関数内で import 文を使用している場合

  • 関数内で exec 文を使用している場合
  • 関数内で eval 関数を使用している場合
  • 関数内で import 関数を使用している場合
  • 関数内で sys.exit() を使用している場合

Reference