我有我想操纵的Viterbi算法的一部分。我需要了解此代码中的切片部分:
import numpy as np
A = np.array([[0.6, 0.2, 0.2], [0.5, 0.3, 0.2], [0.4, 0.1, 0.5]])
pi = np.array([0.5, 0.2, 0.3])
O = np.array([[0.7, 0.1, 0.2], [0.1, 0.6, 0.3], [0.3, 0.3, 0.4]])
states = UP, DOWN, UNCHANGED = 0, 1, 2
observations = [UP, UP, DOWN]
alpha = np.zeros((len(observations), len(states))) # time steps x states
alpha[:,:] = float('-inf')
backpointers = np.zeros((len(observations), len(states)), 'int')
***alpha[0, :] = pi * O[:,UP]***
在最后一行中打印出O [::,UP]应该给我什么:[0.7,0.1,0.2]我相信相反,它给了我:
O[:,UP]
Out[15]: array([ 0.7, 0.1, 0.3])
我试图研究这种理解Python的切片符号我不明白为什么它会更改数组的最后一个元素。
另外,我运行此:
O[:,UNCHANGED]
Out[17]: array([ 0.2, 0.3, 0.4])
我仍然是python的新手,我需要一些帮助
您正在混合列和行的符号。
您打印O[:,UP]
,它为您提供所有行,只是" UP"列(索引0(。
您的O
是:
array([[ 0.7, 0.1, 0.2],
[ 0.1, 0.6, 0.3],
[ 0.3, 0.3, 0.4]])
和 O[:,0]
是
#↓ this column
array([[ 0.7, 0.1, 0.2],
[ 0.1, 0.6, 0.3],
[ 0.3, 0.3, 0.4]])
O[0,:]
将是
array([[ 0.7, 0.1, 0.2], #This row
[ 0.1, 0.6, 0.3],
[ 0.3, 0.3, 0.4]])
只是为了清楚最后一部分, O[:,UNCHANGED]
是 O[:,2]
,在这里:
#↓ this column
array([[ 0.7, 0.1, 0.2],
[ 0.1, 0.6, 0.3],
[ 0.3, 0.3, 0.4]])