假设我定义了一个3x3x3numpy数组
x = numpy.arange(27).reshape((3, 3, 3))
现在,我可以得到一个数组,它包含每个3x3子数组的(0,1)元素,x[:, 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
有多少维的情况。
HYRY的解决方案是正确的,但是我总是发现numpy的
r_
、c_
和s_
索引技巧看起来有点奇怪。所以这里是使用slice
对象的等价物:slice的单个参数是停止位置(即
None
,这意味着x[:]
与x[None:None]
等价)可以先创建索引元组:
相关问题 更多 >
编程相关推荐