【发布时间】:2019-12-24 11:51:31
【问题描述】:
以下脚本为给定列表生成概率矩阵:
transitions = ['A', 'B', 'B', 'C', 'B', 'A', 'D', 'D', 'A', 'B', 'A', 'D']
def rank(c):
return ord(c) - ord('A')
T = [rank(c) for c in transitions]
#create matrix of zeros
M = [[0]*4 for _ in range(4)]
for (i,j) in zip(T,T[1:]):
M[i][j] += 1
#now convert to probabilities:
for row in M:
n = sum(row)
if n > 0:
row[:] = [f/sum(row) for f in row]
#print M:
for row in M:
print(row)
输出
[0.0, 0.5, 0.0, 0.5]
[0.5, 0.25, 0.25, 0.0]
[0.0, 1.0, 0.0, 0.0]
[0.5, 0.0, 0.0, 0.5]
我现在想做相反的事情,按照概率矩阵制作一个新的 A B C D 转移列表。
我怎样才能做到这一点?
【问题讨论】:
-
您的预期输出是什么?应该如何实现?
-
我认为这个想法是生成一个新的随机序列,其中给定当前字母A,下一个是概率为0的A,概率为0.5的B,概率为0的C,概率为0.5的D。因此,使用矩阵的权重。第一个字母应该是什么还不是很清楚。可能只是 A,也可能是与原始序列具有相同权重的随机数?
-
@TimStack,正是 Johan 所说的。第一个字母可以是随机的。所以一个给定长度的随机序列,比如说 10 个字母,遵循 brobability 矩阵,就像 Johan 解释的那样。
-
@JohanC,没错!
-
我理解您正在构建马尔可夫模型是否正确?
标签: python matrix probability markov-chains