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的例子。我想我以前看过这个列表,但没有看到任何相关的内容。