Numpy数组索引与部分索引

时间:2014-04-19 21:23:47

标签: python arrays numpy

我试图拉出一个numpy数组的特定片段,但不知道如何用一个索引元组来表达它。如果索引元组的长度与维数相同,则使用索引元组:

ind = (1,2,3)

# these two values are the same
foo[1,2,3] 
foo[ind]

但是如果我想在一个维度上获得切片,则相同的符号不起作用:

ind = (2,3)

# these two values are not the same
foo[:,2,3]
foo[:,ind]

# and this isn't even proper syntax
foo[:,*ind]

那么有没有办法将一个名为元组的索引与切片一起使用?

2 个答案:

答案 0 :(得分:4)

您可以显式创建slice对象并将其添加到元组中,而不是使用:语法:

ind = (2, 3)
s = slice(None) # equivalent to ':'
foo[(s,) + ind] # add s to tuples

与使用foo[:, ind]相比,此结果应与foo[:,2,3]相同。

答案 1 :(得分:0)

用于访问2D阵列...... 我相信你的建议应该有效。请注意numpy数组从0开始索引。所以要从下面的矩阵中提取第一列和第三列,我使用列索引0和2。

import numpy as np
foo = np.array([[1,2,3],[4,5,6],[7,8,9]])

ind = (0,2)
foo[:,ind]

用于访问3D阵列...... 3D numpy数组由3个值x [i,j,k]访问,其中" i"表示第一个矩阵切片,或

[[ 0,  1,  2],
 [ 3,  4,  5],
 [ 6,  7,  8]]

来自我的下面的例子。 " J"表示第二个矩阵切片,或这些矩阵的行。并且" k"代表他们的专栏。 i,j和k可以是:,整数或元组。因此,我们可以通过使用两组命名元组来访问特定切片,如下所示。

import numpy as np
foo2 = np.array([[[ 0,  1,  2],
               [ 3,  4,  5],
               [ 6,  7,  8]],

              [[ 9, 10, 11],
               [12, 13, 14],
               [15, 16, 17]],

              [[18, 19, 20],
               [21, 22, 23],
               [24, 25, 26]]])

ind1 = (1,2)
ind2 = (0,1)

foo2[:,ind1,ind2]