为什么不存在?
import math
[x for x in dir(math) if 'log' in x]
>>> ['log', 'log10', 'log1p']
我知道我可以做log(x,2),但是log2很常见,所以我有点困惑。
哦,看起来它只是在C99中定义,而不是C90,我猜这回答了我的问题。仍然看起来有点傻。
答案 0 :(得分:48)
我想你已回答了自己的问题。 :-)没有log2(x)
,因为你可以log(x, 2)
。正如禅宗(PEP 20)所说的那样,“应该有一个 - 最好只有一个 - 显而易见的方法。”
也就是说,Issue3366中考虑了log2
(向下滚动到最后3条消息),它为Python 2.7和3.2添加了几个其他C99数学函数到math
模块。 / p>
修改:在Issue11888中重新考虑了log2,并在Python 3.3中添加了。
答案 1 :(得分:6)
我不确定你想要的是,但是:
- 从数学的角度来看,你可以做例如math.log(x)/math.log(2)。
- 如果输入X具有整数类型并且您正在等待整数舍入结果 - 您可以通过右移来更快地完成。这适用于SHR命令,没有泰勒系列+局部插值,这是在libc log()调用的引擎下。
答案 2 :(得分:0)
对于这么晚到的其他人,Python 3.3 及更高版本有 math.log2。我猜它“通常比 log(x, 2) 或 log(x)/log(2) 更准确”。还有 int.bit_length().