標準のPythonでは、累乗を行う操作が3つ用意されています。それぞれの計算に掛かる時間を比較します。
- ** 演算子
- pow()
- math.pow()
ベンチマークのソースコードです。
from benchmarker import Benchmarker import math with Benchmarker(1000000, cycle=3, extra=1) as bench: @bench("** operator") def _(bm): for _ in bm: 3.14 ** 2.5 @bench("pow") def _(bm): for _ in bm: pow(3.14, 2.5) @bench("math.pow") def _(bm): for _ in bm: math.pow(3.14, 2.5)計測結果です。
## benchmarker: release 4.0.1 (for python) ## python version: 3.4.0 ## python compiler: MSC v.1600 32 bit (Intel) ## python platform: Windows-8-6.2.9200 ... ## Ranking real ** operator 0.1615 (100.0) ******************** pow 1.0156 ( 15.9) *** math.pow 1.1458 ( 14.1) ***
ご覧の通り計測結果からは「**演算子が圧倒的に速い!」と言えます。ここまで差がつくとは正直驚きです。
(math.pow() はフルパスで呼ばないようにすればもう少し高速になります。それでも、**演算子の速さには全く敵いません。)
累乗演算には、**演算子を使うのが良いようです。
0 件のコメント:
コメントを投稿