使用幂运算** 0.5比math.sqrt效率低吗? [英] Using exponentiation **0.5 less efficient than math.sqrt?

查看:128
本文介绍了使用幂运算** 0.5比math.sqrt效率低吗?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

引用"Python编程:计算机科学"

我们本可以扎根 使用幂运算**.使用 math.sqrt效率更高.

We could have taken the square root using exponentiation **. Using math.sqrt is somewhat more efficient.

有点",但是到什么程度,以及如何?

"Somewhat", but to what extent, and how?

推荐答案

从理论上讲, duffymo的答案是很好的猜测.但是实际上,在我的机器上,它不是更有效:

Theoretically, hammar's answer and duffymo's answer are good guesses. But in practice, on my machine, it's not more efficient:

>>> import timeit
>>> timeit.timeit(stmt='[n ** 0.5 for n in range(100)]', setup='import math', number=10000)
0.15518403053283691
>>> timeit.timeit(stmt='[math.sqrt(n) for n in range(100)]', setup='import math', number=10000)
0.17707490921020508

部分问题是.操作.如果直接将sqrt导入名称空间,则会得到一些改进.

Part of the problem is the . operation. If you import sqrt directly into the namespace, you get a slight improvement.

>>> timeit.timeit(stmt='[sqrt(n) for n in range(100)]', setup='from math import sqrt', number=10000)
0.15312695503234863

那里的关键字:轻微.

进一步的测试表明,随着数量的增加,使用sqrt所获得的收益也会增加.但是仍然不是很多!

Further testing indicates that as the number gets larger, the benefit you get from using sqrt increases. But still not by a lot!

>>> timeit.timeit(stmt='[n ** 0.5 for n in range(1000000)]', setup='import math', number=1)
0.18888211250305176
>>> timeit.timeit(stmt='[math.sqrt(n) for n in range(1000000)]', setup='import math', number=1)
0.18425297737121582
>>> timeit.timeit(stmt='[sqrt(n) for n in range(1000000)]', setup='from math import sqrt', number=1)
0.1571958065032959

这篇关于使用幂运算** 0.5比math.sqrt效率低吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆