import numpy as np
#模板序列,用来给字母匹配序号
ls = "0123456789abcdefghijklmnopqrstuvwxyz"
#该处需要修改总的状态数量
global num
num = 14
#str为状态序列,0-9代表前10个状态,11及以上用abcd...代替
str = "abcd01b34a567c89dacb2c12d407a36b47b8140ad83c14c6071679ba0823"
def mcmc (str):
#对num大小的状态转移构建状态转移矩阵
matrix = np.zeros((num,num))
origin_matrix = np.zeros((1,num))
#计算状态转移频次
for k in range (len(str)-1):
for i in range (len(ls)):
if ls[i] == str[k]:
x = i #取出序号
# print ("x:\n",x)
for j in range (len(ls)): #取出序号
if ls[j] == str[k+1]:
y = j
# print ("y:\n",y)
matrix[x][y] = matrix[x][y]+1
# print ("times_matrix:\n",matrix)
for k in range (len(str)):
for i in range (len(ls)):
if ls[i] == str[k]:
x = i
origin_matrix[0][x] = origin_matrix[0][x] + 1 #计算初始状态出现次数
# print ("origin_matrix:\n",origin_matrix)
# 状态转移矩阵
origin_matrix = 1/len(str)*origin_matrix #初始状态归一化
trans_matrix = np.zeros((num,num))
for i in range (num): #状态转移矩阵行和为1,对每一行进行归一化处理
trans_matrix[i] = 1/np.sum(matrix[i])*matrix[i]
print ("origin_matrix:\n",origin_matrix)
print ("trans_matrix:\n",trans_matrix)
#计算概率
prob = np.dot(origin_matrix,trans_matrix)
print ("next_prob:\n",prob)
mcmc(str)
(Python代码)马尔科夫概率:通过已知的状态序列,自动计算62及以下数量状态的初始状态和状态转移矩阵,从而计算出下一时刻的状态
最新推荐文章于 2023-08-02 18:53:51 发布