2015-06-15 40 views
0

我在Python中實現了Viterbi算法(動態算法),並且我注意到對於大型輸入文件,概率不斷在浮點精度之外倍增和收縮。我需要將這些數字存儲在日誌空間中。在python中將浮點數轉換爲日誌空間

任何人都可以給出一個簡單的例子如何將0.0000003轉換爲日誌空間的Python代碼片段? (我不確定它是否需要自然記錄或其他日誌,我只聽說過「日誌空間」,但並不真正瞭解它。)

謝謝!

+0

你能使用''decimal.Decimal()''這裏? –

回答

0

要移動到日誌空間,請使用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