只有整数、片(`:`)、省略号(`…`)、numpy.newaxis(`None`)和整数或布尔数组是有效的标记

2024-06-17 08:50:28 发布

您现在位置:Python中文网/ 问答频道 /正文

下午好/早上好/晚上好

两天以来,我一直在尝试使用viterbi算法实现一个隐马尔可夫模型,但我没有成功

我有一个错误:只有整数、片(:)、省略号(...)、numpy.newaxis(None)和整数或布尔数组是有效的索引

在第41行中,“错误是路径,delta,phi=viterbi(pi,a,b,obs)” 在第35行中,“路径[t]=phi[path[t+1],[t+1]”

我的代码是:

'''

def viterbi(pi, a, b, obs):

nStates = np.shape(b)[0]
T = np.shape(obs)[0]

# init blank path
path = np.zeros(T)
# delta --> highest probability of any path that reaches state i
delta = np.zeros((nStates, T))
# phi --> argmax by time step for each state
phi = np.zeros((nStates, T))

# init delta and phi 
delta[:, 0] = pi * b[:, obs[0]]
phi[:, 0] = 0

print('\nStart Walk Forward\n')    
# the forward algorithm extension
for t in range(1, T):
    for s in range(nStates):
        delta[s, t] = np.max(delta[:, t-1] * a[:, s]) * b[s, obs[t]] 
        phi[s, t] = np.argmax(delta[:, t-1] * a[:, s])
        print('s={s} and t={t}: phi[{s}, {t}] = {phi}'.format(s=s, t=t, phi=phi[s, t]))

# find optimal path
print('-'*50)
print('Start Backtrace\n')
path[T-1] = np.argmax(delta[:, T-1])
#p('init path\n    t={} path[{}-1]={}\n'.format(T-1, T, path[T-1]))
for t in range(T-2, -1, -1):
    path[t] = phi[path[t+1], [t+1]]  #line35
    #p(' '*4 + 't={t}, path[{t}+1]={path}, [{t}+1]={i}'.format(t=t, path=path[t+1], i=[t+1]))
    print('path[{}] = {}'.format(t, path[t]))

return path, delta, phi

path, delta, phi = viterbi(pi, a, b, obs)  #line41
print('\nsingle best state path: \n', path)
print('delta:\n', delta)
print('phi:\n', ph) 
                           '''

Tags: pathformatforinitnppizerosdelta