Python Numpy多维数组切片

Python Numpy多维数组切片,python,arrays,multidimensional-array,indexing,numpy,Python,Arrays,Multidimensional Array,Indexing,Numpy,假设我用 x = numpy.arange(27).reshape((3, 3, 3)) 现在,我可以用x[:,0,1]获得一个数组,其中包含每个3x3子数组的(0,1)元素,该数组返回数组([1,10,19])。如果我有一个元组(m,n)并且想要检索存储在元组中的每个子数组(0,1)的(m,n)元素,该怎么办 例如,假设我有t=(0,1)。我尝试了x[:,t],但它没有正确的行为-它返回每个子数组的第0行和第1行。我找到的最简单的解决办法是 x.transpose()[tuple(rever

假设我用

x = numpy.arange(27).reshape((3, 3, 3))
现在,我可以用
x[:,0,1]
获得一个数组,其中包含每个3x3子数组的(0,1)元素,该数组返回
数组([1,10,19])
。如果我有一个元组(m,n)并且想要检索存储在元组中的每个子数组(0,1)的(m,n)元素,该怎么办

例如,假设我有
t=(0,1)
。我尝试了
x[:,t]
,但它没有正确的行为-它返回每个子数组的第0行和第1行。我找到的最简单的解决办法是

x.transpose()[tuple(reversed(t))].transpose()

但我相信一定有更好的办法。当然,在这种情况下,我可以做
x[:,t[0],t[1]]
,但这不能推广到我不知道
x
t
有多少维度的情况。

可以先创建索引元组:

index = (numpy.s_[:],)+t 
x[index]

HYRY的解决方案是正确的,但我总是发现numpy的
r\u
c\u
s\u
索引技巧看起来有点奇怪。下面是使用
切片
对象的等价物:

x[(slice(None),) + t]
切片的单个参数是停止位置(即
None
意思与
x[:]
相当于
x[None:None]

很酷,谢谢你的帮助(你也是wim)。我找到了更多关于s_u和slice的例子。我想我以前看过这个列表,但没有看到任何相关的内容。