【问题标题】:Smallest integer value greater than or equal to value of log [duplicate]大于或等于日志值的最小整数值[重复]
【发布时间】:2014-05-09 11:46:38
【问题描述】:

我有一些整数计数假设'51',我想用二进制数表示那么多整数。在这里我需要做log(51),所以我得到一些浮点值作为3.93182563272。但我希望它采用某种整数格式,如4,可用于表示 51 个整数。 日志值可以计算为

import math
math.log(51)

【问题讨论】:

  • 您的意思是要将浮点数四舍五入到最接近的整数?
  • 对数的底数是多少?既然你提到二进制数,我怀疑以 2 为基数的日志。在这种情况下,请注意 math.log 不会这样做,它使用以 e 为底数(自然对数)。

标签: python int logarithm


【解决方案1】:

如果您想要二进制数字的数量,那就是以2 为底数,而math.log 默认返回自然对数(以e 为底数)。第二个参数可用于指定替代基础。然后你可以使用math.ceil 将数字四舍五入。

math.ceil(math.log(51, 2))
6.0

您尚未指定 python 版本,但如果您有 python 3,(感谢@delnan),您可以使用 math.log2 代替,应该更准确:

math.ceil(math.log2(51))
6.0

numpy also has a log2 method(但对于这个应用程序来说可能是多余的)。

math.ceil实际上返回一个浮点数,所以如果你想要一个整数,你可以将表达式包装在int中:

int(math.ceil(math.log(51, 2)))
6

顺便说一下,还有一个函数bin,你可能想看看。它返回一个包含整数二进制表示的字符串:

bin(51)
'0b110011'

...但是如果您不想搞砸这些(再次感谢@delnan),您可以改用bit_length

(51).bit_length()    
6

【讨论】:

  • 仅供参考,math.log(x, 2) 不如 math.log2(x) 准确,如果 x 是整数,int(ceil(log2(x)) 在很多方面都比 x.bit_length() 差。
  • @delnan 我没有 math.log2 (python 2.7.3)。我注意到 numpy 有一个 log2 方法,这是你的意思吗?
  • 不,我假设 Python 3 的 mathint。这些天我很少使用 2.x,所以我有时会忘记哪些是反向移植的,哪些不是。
  • @delnan 感谢您的贡献,我进行了编辑,希望所有内容都已包含在内。
  • @TomFenech 谢谢。我正在使用 python 2.7。
【解决方案2】:

在将其转换为 int 之前,您可以使用上限“向上取整”函数:

math.ceil(math.log(51)) # round up

你还应该看看:

math.floor() # round down
math.round()

如果您需要将其保存为整数类型,您可以将其转换为该类型:

int()

【讨论】:

  • 请注意,math.log 默认情况下会给出自然对数,这可能不是 OP 想要的。
猜你喜欢
  • 2016-09-30
  • 1970-01-01
  • 2020-01-03
  • 2013-06-07
  • 2010-09-26
  • 2016-09-25
  • 2018-08-09
  • 1970-01-01
  • 2022-12-09
相关资源
最近更新 更多