我试图拉出一个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]
那么有没有办法将一个名为元组的索引与切片一起使用?
答案 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]