python数学模块中的log2

nic*_*ell 42 python math

为什么不存在?

import math
[x for x in dir(math) if 'log' in x]
>>> ['log', 'log10', 'log1p']
Run Code Online (Sandbox Code Playgroud)

我知道我可以做log(x,2),但是log2很常见,所以我有点困惑.

哦,看起来它只在C99中定义,而不是C90,我猜这回答了我的问题.仍然看起来有点傻.

Dan*_*ach 51

我想你已经回答了自己的问题.:-)没有,log2(x)因为你可以做到log(x, 2).正如Python的禅宗(PEP 20)所说,"应该有一个 - 最好只有一个 - 明显的方式来做到这一点."

也就是说,log2Issue3366中考虑(向下滚动到最后3条消息),它math为Python 2.7和3.2 的模块添加了几个其他C99数学函数.

编辑:log2在Issue11888中被重新考虑并在Python 3.3中添加.

  • 这引出了一个问题,为什么`log10`存在? (17认同)
  • log10是C89,因此它存在于所有常见平台上,包括Windows.所以Python为它添加一个包装器是微不足道的. (5认同)
  • 例如,如果你试图找到2的幂大于或等于2**29(=本身),使用`2**ceil(log(n,2))`,你会得到错误的答案,因为`math.log(n,2)`= 29.000000000000004而不是29.0.`np.log2(n)`= 29.0,所以产生正确的答案. (3认同)

bru*_*iuz 7

我不确定你想要的是什么,但是:

- 从数学的角度来看,你可以做例如math.log(x)/math.log(2).

- 如果输入X具有整数类型并且您正在等待积分舍入结果 - 您可以通过右移来更快地完成.这适用于SHR命令,没有泰勒系列+局部插值,这是在libc log()调用的引擎下.