(Python代码)马尔科夫概率:通过已知的状态序列,自动计算62及以下数量状态的初始状态和状态转移矩阵,从而计算出下一时刻的状态

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)

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ICECREAM-7

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值