import numpy as np
climate = ["sunny", "rain"]
behavior = ["walk", "shop", "clean"]
start_p = [0.6, 0.4] # rain的概率为0.6,sunny的概率为0.4
trans = [[0.7, 0.3], [0.4, 0.6]]
# trans_p_rain = [0.7, 0.3] # rain sunny
# tarns_p_sunny = [0.4, 0.6]
emit = [[0.1, 0.4, 0.5], [0.6, 0.3, 0.1]]
# emit_p_rain = [0.1, 0.4, 0.5] # walk shop clean
# emit_p_sunny = [0.6, 0.3, 0.1]
path = []
a1 = start_p[0] * emit[0][0] # 第一天是雨天
b1 = start_p[1] * emit[1][0] # 第一天是晴天
print(a1)
print(b1)
print("*************")
if a1 > b1:
path.append(climate[1])
else:
path.append(climate[0])
x1 = []
y1 = []
for j in range(2):
a2 = a1 * trans[0][j] * emit[j][1] # rain -> rain, rain -> sunny
b2 = b1 * trans[1][j] * emit[j][1] # sunny -> rain, sunny -> sunny
if j == 0:
x1.append(a2)
x1.append(b2)
else:
y1.append(a2)
y1.append(b2)
print(x1)
print(y1)
print("*****************")
a = max(x1)
b = max(y1)
if a > b:
path.append(climate[1])
else:
path.append(climate[0])
x2 = []
y2 = []
for i in range(2):
for j in range(2):
a3 = x1[i] * trans[0][j] * emit[j][2]
b3 = y1[i] * trans[1][j] * emit[j][2]
if j == 0:
x2.append(a3)
x2.append(b3)
else:
y2.append(a3)
y2.append(b3)
print(x2)
print(y2)
x = max(x2)
y = max(y2)
if x > y:
path.append(climate[1])
else:
path.append(climate[0])
print(path)
运行结果
"D:py projectexervenvscriptspython.exe" "D:/py project/exer/Viterbi_1.py" 0.06 0.24 ************* [0.0168, 0.038400000000000004] [0.005399999999999999, 0.043199999999999995] ***************** [0.005879999999999999, 0.00108, 0.01344, 0.00864] [0.000504, 0.00032399999999999996, 0.001152, 0.0025919999999999997] ['sunny', 'sunny', 'rain']



