带有二维索引的numpy多维选择器

时间:2019-03-03 08:26:07

标签: python numpy numpy-broadcasting

我对以下情况感到困惑:

x = np.random.rand(1, 32, 3, 64);

print(x.shape)

#(1, 32, 3, 64)

然后我应用此选择。

y = x[np.arange(1)[:, None], :, 1,  np.arange(64)[None, :]]

我认为我选择了维度0、1、3的所有行,第二维度的1应该是例外..但是它给出了

print(y.shape)

#(1, 64, 32)

对于以下情况:

y = x[np.arange(1)[:, None], :, [1],  np.arange(64)[None, :]]

我认为我选择了0、1维的所有行,并且始终使用2维的第一行。

print(y.shape)

#(1, 64, 32)

为什么在两种情况下形状都变为(1、64、32)?

1和[1]有什么区别?

1 个答案:

答案 0 :(得分:0)

您可能会为您要实现的目标提供更多的背景信息吗?您使用np.arange(1)[:, None]而不只是:进行索引是有特定原因吗?例如是y = x[:,:,1,:]形状:(1,32,64)不是您要的内容?

1索引与[1]索引之间的差异似乎可以作为高级索引:https://docs.scipy.org/doc/numpy/reference/arrays.indexing.html#advanced-indexing