import numpy as np
# 状态转移矩阵
A = np.array([[0.5,0.2,0.3],[0.3,0.5,0.2],[0.2,0.3,0.5]])
# 观测矩阵
B = np.array([[0.5,0.5],[0.4,0.6],[0.7,0.3]])
# 初始矩阵
pi = np.array([0.2,0.4,0.4])
# 序列
O = np.array([0,1,0])
m=np.shape(A)[0]
T=len(O)
# 初始化
ksi=np.zeros((T,m))
fi=np.zeros((T,m))
for i in range(m):
ksi[0][i]=pi[i]*B[i][O[0]]
fi[0][i]=0
# 递推
for t in range(1,T):
for i in range(m):
k=np.zeros((1,m))
for j in range(m):
k[0][j]=ksi[t-1][j]*A[j][i]
ksi[t][i]=B[i][O[t]] * np.max(k,axis=1)
fi[t][i]=np.argmax(k,axis=1)+1
# print(ksi)
# print(fi)