两个宗教阵列切片



我有我想操纵的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]])

最新更新