人間だったら考えて

考えて考えて人間だったら考えて

【Python】組み込み関数のsumとnumpyのsumはどっちが速い?

この記事は何?

Pythonでリストやnumpy.array中の数値和を求めたい時は,組み込み関数のsumを使う方法とnumpy.sumを使う方法があります.
この記事では,どちらの方法がより高速に和を求められるのかを確認します.

結論は?

リスト中の数値和を求めるときは組み込み関数のsumが速く,numpy.array中の数値和を求めるときはnumpy.sumが速かったです.

実験

N = 10000000の要素のリストおよびnumpy.arrayを生成し,組み込み関数のsumおよびnumpy.sumの実行時間を計測します.
Pythonのバージョンはanaconda 2.5.0 (Python 3.5.1)です.

実行結果

import numpy as np
N = 10000000
python_list = [i for i in range(N)]
numpy_array = np.arange(N)
# python sum -> python list
%timeit sum(python_list)

    10 loops, best of 3: 82.6 ms per loop
# python sum -> numpy array
%timeit sum(numpy_array)

    1 loops, best of 3: 959 ms per loop
# numpy sum -> python list
%timeit np.sum(python_list)

    1 loops, best of 3: 588 ms per loop
# numpy sum -> numpy array
%timeit np.sum(numpy_array)

    100 loops, best of 3: 7.46 ms per loop

表にまとめます.

組み込みsum numpy.sum
python list 82.6 ms 588 ms
numpy array 959 ms 7.46 ms

その他

何でもかんでもnumpy.sumを使えば良いというわけでは無さそうです.numpy.arrayに変換してからnumpy関数を使って処理するのが一番良さそうですね.