我想将过渡字典转换为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)
答案 0 :(得分:1)
以下是将字典转换为过渡矩阵的方法:
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
中给出的概率不同。