假设我已经使用
定义了一个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]]
,但这不能推广到我不知道x
和t
有多少维度的情况。
答案 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]
的方式相同)