↓もし、良かったらSNSでの紹介よろしくお願いします。

Python平均を求める(sum + len) vs numpy.average

bootstrap

平均を求める

平均を求める(組み込み関数を使う)

Python3の場合はfloatがいらない

>>>data = [1, 4, 2, 3, 4, 6]
>>>sum(data)/float(len(data))
3.3333333333333335

平均を求める(numpyを使う)

>>>import numpy as np
>>>data = [1, 4, 2, 3, 4, 6]
>>>np.average(data)
3.3333333333333335

どっちが早い?(sum + len vs numpy.average)

結果から言うと

  • データ数が多いときはnumpyが早い
  • データ数が少ないときはnumpyが遅い

実際の計測

データがリストで短いときはnumpyの負け

In [1]: import numpy as np
In [2]: data = [1, 4, 2, 4, 6]
In [3]: %timeit -n 100 -r 1 sum(data)/float(len(data))
100 loops, best of 1: 1.05 μs per loop
In [4]: %timeit -n 100 -r 1 np.average(data)
100 loops, best of 1: 33 μs per loop

データがリストで長いときはnumpyの勝ち

In [5]: data = list(np.random.random(1000))
In [6]: %timeit -n 100 -r 1 sum(data)/float(len(data))
100 loops, best of 1: 490 μs per loop
In [7]: %timeit -n 100 -r 1 np.average(data)
100 loops, best of 1: 199 μs per loop

データがnumpy.arrayで短いときはnumpyの負け

In [8]: data = np.array([1, 4, 2, 3, 4, 6])
In [9]: %timeit -n 100 -r 1 sum(data)/float(len(data))
100 loops, best of 1: 11 μs per loop
In [10]: %timeit -n 100 -r 1 np.average(data)
100 loops, best of 1: 19.5 μs per loop

データがnumpy.arrayで長いときはnumpyの勝ち

In [11]: data = np.random.random(1000)
In [12]: %timeit -n 100 -r 1 sum(data)/float(len(data))
100 loops, best of 1: 523 μs per loop
In [13]: %timeit -n 100 -r 1 np.average(data)
100 loops, best of 1: 21.3 μs per loop

↓もし、良かったらSNSでの紹介よろしくお願いします。

フォローする