马尔可夫链概率计算 - Python

0 投票
1 回答
3606 浏览
提问于 2025-04-18 17:07

我有一个Python字典,里面存储了一个马尔可夫链模型的状态转移概率。

dict_m = {('E', 'F'): 0.29032258064516131, ('D', 'F'): 0.39726027397260272, ('D', 'D'): 0.30136986301369861, ('E', 'D'): 0.32258064516129031, ('E', 'E'): 0.38709677419354838, ('D', 'E'): 0.30136986301369861, ('F', 'F'): 0.68152866242038213, ('F', 'E'): 0.10191082802547771, ('F', 'D'): 0.19108280254777071, ('F', 'H'): 0.025477707006369428, ('H', 'F'): 1.0}

假设我有一个数据序列,像下面这样。状态之间的转移是从D到E,从E到F,再从F到E,等等。

s = ['D','E','F','E','E','F','H','F']

现在我需要通过把字典中的概率相乘来计算概率值。在这种情况下,所有状态转移的概率是

probability = 0.301370*0.290323*0.101911*0.387097*0.290323*0.025478*1.000000

有没有人能帮我把这个公式写出来。

print zip(s,s[1:])
[('D', 'E'), ('E', 'F'), ('F', 'E'), ('E', 'E'), ('E', 'F'), ('F', 'H'), ('H', 'F')]

1 个回答

2

你需要用zip生成的元组来查找字典里的值,然后把所有的数字相乘。

from operator import mul
print reduce(mul, (dict_m[t] for t in zip(s, s[1:])))

撰写回答