多维数组切片

2024-04-19 09:11:00 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我定义了一个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]],但这不能推广到我不知道xt有多少维的情况。


Tags: numpy元素定义情况数组array元组transpose
2条回答

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

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

slice的单个参数是停止位置(即None,这意味着x[:]x[None:None]等价)

可以先创建索引元组:

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

相关问题 更多 >