在 python 中将浮点数转换为对数 space
Convert float to log space in python
我正在 Python 中实现 Viterbi 算法(一种动态算法),我注意到对于大型输入文件,概率不断增加和缩小,超出浮点精度。我需要将数字存储在日志 space 中。
任何人都可以给出一个简单的示例 Python 代码片段,说明如何将 0.0000003 转换为 log-space? (我不确定它是否需要自然日志或其他日志。我只听说过 "log-space" 但并不真正了解它。)
谢谢!
要移动到日志 space,请使用 log
。要再次返回,请使用 exp
。 The 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
我正在 Python 中实现 Viterbi 算法(一种动态算法),我注意到对于大型输入文件,概率不断增加和缩小,超出浮点精度。我需要将数字存储在日志 space 中。
任何人都可以给出一个简单的示例 Python 代码片段,说明如何将 0.0000003 转换为 log-space? (我不确定它是否需要自然日志或其他日志。我只听说过 "log-space" 但并不真正了解它。)
谢谢!
要移动到日志 space,请使用 log
。要再次返回,请使用 exp
。 The 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