两个宗派数组切片

时间:2018-02-26 05:05:15

标签: python numpy multidimensional-array

我有一部分维特比算法,我想操纵它。我需要理解这段代码中的切片部分:

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])

我试着调查这个Understanding Python's slice notation 我无法理解为什么它会改变数组的最后一个元素。

另外,我运行这个:

O[:,UNCHANGED]
Out[17]: array([ 0.2,  0.3,  0.4])

我仍然是python中的新手,我需要一些帮助

1 个答案:

答案 0 :(得分:1)

您正在混合列和行的表示法。

您打印O[:,UP],它会为您提供所有行,而只是#34; 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]])