Python math 模块中的 log2

46 投票
3 回答
55078 浏览
提问于 2025-04-15 23:40

为什么这个东西不存在呢?

import math
[x for x in dir(math) if 'log' in x]
>>> ['log', 'log10', 'log1p']

我知道我可以用 log(x,2) 来计算,但 log2 这个写法真的很常见,所以我有点困惑。

哦,看起来这个只在 C99 版本中有定义,而在 C90 版本中没有,我想这就回答了我的问题。不过还是觉得有点奇怪。

3 个回答

0

对于任何晚到的人来说,Python 3.3及以后的版本有一个叫math.log2的函数。这个函数通常比用log(x, 2)或者log(x)/log(2)的方式更准确。我猜是这样。此外,还有一个int.bit_length()的方法。

在Python中以2为底的对数

https://docs.python.org/3/library/math.html

6

我不太确定你想要的是什么,但可以说:

-- 从数学的角度来看,你可以用 math.log(x)/math.log(2) 来计算。

-- 如果输入的 X 是整数类型,并且你想要的是四舍五入后的整数结果,那么你可以用右移操作来更快地实现。这种方法使用 SHR 命令,不需要像 libc 的 log() 函数那样复杂的泰勒级数和局部插值。

55

我觉得你自己已经回答了自己的问题。:-) 其实没有 log2(x) 这个函数,因为你可以用 log(x, 2) 来实现同样的功能。正如《Python之禅》(PEP 20)所说,“应该有一种——最好只有一种——明显的方法来做到这一点。”

不过,log2 这个函数在 问题3366 中被考虑过(可以往下翻到最后三条消息),当时为 Python 2.7 和 3.2 的 math 模块添加了几个其他的 C99 数学函数。

编辑log2问题11888 中重新被考虑,并在 Python 3.3 中添加了这个函数。

撰写回答