Python 用于NumPy中高级索引的结果形状

Python 用于NumPy中高级索引的结果形状,python,arrays,numpy,indexing,Python,Arrays,Numpy,Indexing,当使用多个相同大小的数组对numpy数组进行索引时,其行为取决于索引轴的位置 如果轴彼此相邻,则轴将添加到索引阵列的位置 如果轴彼此不相邻,则会在阵列的开头添加新轴 将numpy导入为np a=np.one((4,5,6,7,8)) 打印(a[:,[0,1],[0,1],:,:,:]形状)#(4,2,7,8) 打印(a[:,[0,1],:,[0,1],:]形状)#(2,4,6,8) 打印(a[:,[0,1],[0,1],[0,1],:]形状)#(4,2,8) 打印(a[:,[0,1],[0,

当使用多个相同大小的数组对numpy数组进行索引时,其行为取决于索引轴的位置

  • 如果轴彼此相邻,则轴将添加到索引阵列的位置
  • 如果轴彼此不相邻,则会在阵列的开头添加新轴
将numpy导入为np
a=np.one((4,5,6,7,8))
打印(a[:,[0,1],[0,1],:,:,:]形状)#(4,2,7,8)
打印(a[:,[0,1],:,[0,1],:]形状)#(2,4,6,8)
打印(a[:,[0,1],[0,1],[0,1],:]形状)#(4,2,8)
打印(a[:,[0,1],[0,1],:,[0,1]]形状)#(2,4,7)
我的问题与答案中提到的有关。 但是这个
oindex
似乎还不可用


我有什么选择来实现一致的行为?例如,始终在开头添加新轴,无论中间是否有

您的示例清楚地说明了高级索引和基本索引相结合所产生的歧义。链接是一种不太模棱两可的情况,涉及列表和标量

5号和7号合同是2号的,但它应该使用什么顺序

(4, 2, 6, 8)
(4, 6, 2, 8)
面对这种模糊性,
numpy
开发人员选择将其放在首位

(2, 4, 6, 8)

从NEP/PR可以看出,这个问题并不简单,也没有得到解决。

什么是一致的行为?是的,我同意。在开始时添加新轴是合理的。但我觉得奇怪的是,
a[:,[0,1],[0,1],:,:]
的情况并非如此,但在这种情况下,并不存在歧义,因为两个(或三个)收缩维度是在一起的。是的,你是对的。但是,如果您将其视为一个以两轴i和j作为输入的操作,那么对于j=i+1的情况,我不希望有不同的行为。
(2, 4, 6, 8)