python - 如何将转换字典转换为马尔可夫链中的转换矩阵?
问题描述
我想将转换字典转换为 Marcov 链中的转换矩阵。我有一本字典,其中每个元素的值都指示我可以从那个状态去哪里(例如,从 A,我可以去 B 或 E)。我想把它转换成一个矩阵,每行代表从每个状态移动的概率。
dictionary = {'A': 'BE', 'B': 'AFC', 'C': 'BGD', 'D': 'CH', 'E': 'AF', 'F': 'EBG', 'G': 'FCH', 'H': 'GD'}
我的期望:
mat = [[0.5, 0, 0, 0, 0.5, 0, 0, 0] #state A
[0.333, 0, 0.333, 0, 0, 0.333, 0, 0] #state B
... ] #untill state H (8X8 matrix)
解决方案
以下是将字典转换为转换矩阵的方法:
import numpy as np
dictionary = {'A': 'BE', 'B': 'AFC', 'C': 'BGD', 'D': 'CH', 'E': 'AF', 'F': 'EBG', 'G': 'FCH', 'H': 'GD'}
letter_to_index = {letter: i for i, letter in enumerate(dictionary)}
n = len(dictionary)
mat = np.zeros((n, n))
for start, ends in dictionary.items():
for end in ends:
mat[letter_to_index[start],
letter_to_index[end]] += 1./len(ends)
但是,您给出的预期结果值似乎不正确:第一个状态 (A) 的概率总和不等于 1,并且与dictionary
.
推荐阅读
- java - 即使最大索引为 300,Logback 也仅创建 22 个日志文件
- sonarqube - 本地 SonarScanner 没有为反应项目导入 lcov.info
- javascript - 自动设置pdf页面高度后页面大小不起作用
- javascript - jQuery | 导航栏问题,当我单击关于我们时,它会更改状态,但是通过单击返回主页它不起作用,标题标题也没有改变
- amazon-ec2 - 无法访问此站点 在 cs-cart 中响应时间过长
- android - 错误:在构建期间调用了 setState() 或 markNeedsBuild()
- android - SplashScreen API 有时不显示图标
- matlab - 如何将函数中的独立参数从单个值扩展为向量?
- python - 将外部 JQuery 包含到 Django 模板中的问题
- reactjs - 在 expo 应用程序上使用材料表模块时出错