Numpy多维数组切片

时间:2011-09-06 22:31:25

标签: python arrays multidimensional-array indexing numpy

假设我已经使用

定义了一个3x3x3 numpy数组
x = numpy.arange(27).reshape((3, 3, 3))

现在,我可以得到一个数组,其中包含x[:, 0, 1]的每个3x3子数组的(0,1)元素,返回array([ 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]],但这不能推广到我不知道xt有多少维度的情况。

2 个答案:

答案 0 :(得分:9)

您可以先创建索引元组:

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

答案 1 :(得分:4)

HYRY解决方案是正确的,但我总是发现numpy的r_c_s_索引技巧看起来有点奇怪。所以这是使用slice对象的等价物:

x[(slice(None),) + t]

切片的单个参数是停止位置(即None表示所有与x[:]等同于x[None:None]的方式相同)