在Python中将float转换为日志空间

时间:2015-06-15 03:44:34

标签: python floating-point logarithm natural-logarithm

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

任何人都可以提供一个简单的示例Python代码片段,如何将0.0000003转换为日志空间吗? (我不确定它是否需要自然日志或其他日志。我只听说过“日志空间”,但实际上并不知道它。)

谢谢!

1 个答案:

答案 0 :(得分:0)

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

>>> 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