【问题标题】:Convert float to log space in python将浮点数转换为python中的日志空间
【发布时间】:2015-06-15 03:44:34
【问题描述】:

我正在 Python 中实现 Viterbi 算法(一种动态算法),我注意到对于大型输入文件,概率不断增加并缩小到浮点精度之外。我需要将数字存储在日志空间中。

谁能给出一个简单的 Python code-sn-p 示例,说明如何将 0.0000003 转换为日志空间? (我不确定它是否需要是自然日志或其他日志。我只听说过“日志空间”但并不真正了解它。)

谢谢!

【问题讨论】:

  • 你可以在这里使用decimal.Decimal()吗?

标签: python floating-point logarithm natural-logarithm


【解决方案1】:

要移动到日志空间,请使用log。要再次返回,请使用expThe rules in log space are different - 例如。执行乘法是在日志空间中添加。

>>> from math import log, exp
>>> log(0.0000003)
-15.01948336229021
>>> exp(-15.01948336229021)
3.0000000000000015e-07
>>> log(0.0000003) + log(0.0000003)
-30.03896672458042
>>> exp(-30.03896672458042)
9.000000000000011e-14 # 0.0000003 * 0.0000003 

这是一个使用一些小概率的例子

>>> probabilities = [0.0000003, 0.0000004, 0.0000005]
>>> exp(sum(log(p) for p in probabilities))
5.999999999999992e-20

【讨论】:

    猜你喜欢
    • 2019-02-17
    • 1970-01-01
    • 2021-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-22
    • 1970-01-01
    • 2022-01-17
    相关资源
    最近更新 更多