Pythonで実数n(n≧0)の平方根を求めるには,n**(1/2),math.sqrt(n),numpy.sqrt(n),pow(n,1/2)などがある。答えの有効桁数や,nを負数にした場合の挙動などに違いが見られるが,基本的には同じ答えが得られる。
time
math
numpy np
n in (10):
(n+1,'回戦')
t1=time.time()
i in (1000000):
p=i**(1/2)
t2=time.time()
(t2-t1)
t1=time.time()
i in (1000000):
p=math.sqrt(i)
t2=time.time()
(t2-t1)
t1=time.time()
i in (1000000):
p=(i,1/2)
t2=time.time()
(t2-t1)
t1=time.time()
i in (1000000):
p=np.sqrt(i)
t2=time.time()
(t2-t1)
上のコードをPythonista3とJupyter Notebookで実行したところ,
n**(1/2)と
math.sqrt(n)がほぼ同じで速く,
pow(n,1/2)が少し遅く,
numpy.sqrt(n)がかなり遅いという結果になりました。(
numpy.sqrt()は配列やリストなど複数の数をまとめて処理させると速いそうです。)
Pythonista3(iPad 2017モデル) | Jupyter Notebook |
1 回戦 0.25328826904296875 ← n**(1/2) 0.2289888858795166 ← math.sqrt(n) 0.3298521041870117 ← pow(n,1/2) 5.7376227378845215 ← numpy.sqrt(n) 2 回戦 0.2213280200958252 0.22719120979309082 0.3298790454864502 5.751811981201172 3 回戦 0.22010588645935059 0.2246711254119873 0.3332500457763672 5.7477171421051025 4 回戦 0.2227330207824707 0.22210407257080078 0.3330090045928955 5.739731788635254 5 回戦 0.22470712661743164 0.2236800193786621 0.33375072479248047 5.742916107177734 6 回戦 0.22667884826660156 0.2206406593322754 0.33280515670776367 5.731882095336914 7 回戦 0.22341084480285645 0.2242288589477539 0.33399105072021484 5.738736867904663 8 回戦 0.22586584091186523 0.22838401794433594 0.3287699222564697 5.748663902282715 9 回戦 0.21982312202453613 0.22762703895568848 0.330125093460083 5.741748094558716 10 回戦 0.2216320037841797 0.2248692512512207 0.3309180736541748 5.735345840454102 | 1 回戦 0.30855536460876465 0.38390588760375977 0.6192374229431152 1.7245447635650635 2 回戦 0.28778696060180664 0.243882417678833 0.48995542526245117 1.57002854347229 3 回戦 0.2936825752258301 0.31377220153808594 0.49370288848876953 1.7043194770812988 4 回戦 0.33944153785705566 0.3863201141357422 0.5154023170471191 1.5431039333343506 5 回戦 0.42851996421813965 0.2959136962890625 0.49349379539489746 1.9792490005493164 6 回戦 0.36693477630615234 0.24079442024230957 0.7523927688598633 2.1007657051086426 7 回戦 0.39217042922973633 0.3354625701904297 0.5430314540863037 1.8233575820922852 8 回戦 0.3186681270599365 0.29424381256103516 0.5318617820739746 1.803809642791748 9 回戦 0.28631591796875 0.24852752685546875 0.4139130115509033 1.4854552745819092 10 回戦 0.44863057136535645 0.24718928337097168 0.4330742359161377 1.3051936626434326 |