ウッドチャックの穴掘り記

知りたくなったら掘るしかない

驚愕!!Numpyとmathと時々**の計算速度の違い[Python]

f:id:aisakakun:20151208182544j:plain

 

大規模なプログラムを組めば、一つ一つの計算速度の積み重ねが響いてきます。

甘くみてはいけない、計算速度の短縮。2時間かかるプログラムが30分で終わる可能性だってあります。

というわけで、本日は簡単なプログラムを書いてそれぞれの速度を調べようと思います。

f:id:aisakakun:20151208165657p:plain

import math
import numpy as np
import time
start = time.time()
a =1/(2 * math.pi * math.sqrt(2) * math.sqrt(2) * math.sqrt*1
print("numpy_time:{0}".format(numpy_time))
print("standard_time:{0}".format(standard_time))
print("dtime:{0}".format(dtime))

 

 

今回は、

  1. 赤;mathの冪乗と簡単な計算
  2. 紫;numpyの冪乗と簡単な計算
  3. 緑:標準装備の**とnumpyによる簡単な計算
  4. 青;標準装備の**とmathによる簡単な計算

 

で速度の違いを調べてみました。

結果は... 

f:id:aisakakun:20151208170914p:plain

 4の「標準装備の**とmathによる簡単な計算」の勝利です。

次点は3ですが、3の方式で計算している間に4は3回計算ができることになりますね。

つまり、これが数百万回、数千万回繰り返す計算になると、分単位で差が出てきます

重要ですね。計算。

甘く見ることなかれ。

今回numpyを使用して「遅いじゃないか」と思ったのですが、

numpyは他のところで便利に作用するらしいです。

それはまた今度...

 

 

Pythonスタートブック

Pythonスタートブック

 

 

*1:6 - math.pow(2,2))))
math_time = time.time() - start

starNm = time.time()
b = 1/(2 * np.pi * np.sqrt(2) * np.sqrt(2) * np.sqrt((6 - np.power(2,2))))
numpy_time = time.time() -starNm

startSt = time.time()
c = 1/(2 * np.pi * np.sqrt(2) * np.sqrt(2) * np.sqrt((6 - 2**2)))
standard_time = time.time() - startSt

startMt = time.time()
d = 1/(2 * math.pi * math.sqrt(2) * math.sqrt(2) * math.sqrt((6 - 2**2)))
dtime = time.time() - startMt


print("math_time:{0}".format(math_time