この記事は何?
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関数を使って処理するのが一番良さそうですね.