为什么它不存在?
import math
[x for x in dir(math) if 'log' in x]
>>> ['log', 'log10', 'log1p']
我知道可以使用log(x,2)来计算,但是log2更加常用,所以有些困惑。
哦,看起来它只在C99中被定义,而不是C90,我想这回答了我的问题。尽管还是有点傻。
我认为你已经回答了自己的问题。 :-) 没有 log2(x)
,因为你可以用 log(x, 2)
来代替。正如 Python 之禅(PEP 20)所说:"做一件事应该有-- 最好只有一种 --明显的方法。"
尽管如此,log2
在 Issue3366 中被考虑过(请向下滚动到最后三个信息),并且在 Python 2.7 和 3.2 的 math
模块中添加了几个其他 C99 数学函数。
编辑: log2 在 Issue11888 中重新考虑并添加到 Python 3.3 中。
我不确定你想要什么,但从数学角度来看,可以使用math.log(x)/math.log(2)。
如果输入的X具有整数类型,并且您正在等待整数舍入结果,则可以使用右移运算符更快地完成。这可以使用SHR命令完成,而无需使用Taylor级数+本地插值(这是libc log()调用底层的内容)。
log10
? - Mark Ransomlog10(x)
而不是log(x, 10)
:"math.log10(x)返回x的以10为底的对数。这通常比log(x, 10)更准确"。那么,log(x, 2)
是否比专用实现不够精确? - endolith2 ** ceil(log(n, 2))
,你会得到错误答案,因为math.log(n, 2)
= 29.000000000000004而不是29.0。np.log2(n)
= 29.0确切地产生了正确的答案。 - endolith