NumbaによるPythonの高速化


NumbaによるPythonの高速化

Numbaを使用してPythonを高速化してみる。


環境


  • Core i7-2600K

  • メモリ 8GB

  • Ubuntu 18.04 LTS 64bit

  • Anaconda 3-5.1.0

AnacondaからPythonをインストールすればNumbaもデフォルトで入っている。


Numbaなし

%%time

import numpy as np

def func(target, source, X, Y):
for i in range(X):
for j in range(Y):
target[i][j] = source[i][j]

X = 15000
Y = 15000
target = np.zeros([X, Y])
source = np.ones([X, Y])
func(target, source, X, Y)

CPU times: user 1min 36s, sys: 792 ms, total: 1min 36s

Wall time: 1min 36s


Numbaあり(型指定なし)

%%time

import numpy as np
from numba import jit

@jit
def func(target, source, X, Y):
for i in range(X):
for j in range(Y):
target[i][j] = source[i][j]

X = 15000
Y = 15000
target = np.zeros([X, Y])
source = np.ones([X, Y])
func(target, source, X, Y)

CPU times: user 790 ms, sys: 872 ms, total: 1.66 s

Wall time: 1.68 s


Numbaあり(型指定あり)

%%time

import numpy as np
from numba import float64, int64, jit, void

@jit(void(float64[:,:], float64[:,:], int64, int64), nopython=True)
def func(target, source, X, Y):
for i in range(X):
for j in range(Y):
target[i][j] = source[i][j]

X = 15000
Y = 15000
target = np.zeros([X, Y])
source = np.ones([X, Y])
func(target, source, X, Y)

CPU times: user 619 ms, sys: 828 ms, total: 1.45 s

Wall time: 1.44 s


比較

Numbaなし:96秒

Numbaあり(型指定なし):1.68秒
Numbaあり(型指定あり):1.44秒

という結果であったので、Numbaあり(型指定なし)では57倍、Numbaあり(型指定あり)では67倍高速化したことになる。

今回は型指定ありとなしとではあまり差がなかったが、型指定ありによって大きく高速化できる場合もある。