多维数组转置自身而无需询问

时间:2019-04-04 18:10:41

标签: python numpy

当我尝试以略有不同的方式访问多维数组时,会得到不同的结果,我不理解。

当我跑步时:

ells=np.array([1,2,3,4])

check=np.zeros((2,2,2,len(ells)))
print(check[:,:,:,ells<=4].shape)
print(check[0,:,:,ells<=4].shape)

我实际上可以通过使用

解决此问题
ells=np.array([1,2,3,4])

check=np.zeros((2,2,2,len(ells)))
print(check[:,:,:,ells<=4].shape)
print(check[0,:,:,:][:,:,ells<=4].shape)

但是我想了解为什么第一个版本是错误的。

在第一种情况下,我希望得到形状为(2,2,2,4)和(2,2,4)的数组,但我会得到(2,2,2,4)和(4,2,2 )。

在第二种情况下,我得到了预期的答案(2,2,2,4)和(2,2,4)。

1 个答案:

答案 0 :(得分:0)

这是混合的高级索引和基本索引的示例:

https://docs.scipy.org/doc/numpy-1.16.1/reference/arrays.indexing.html#combining-advanced-and-basic-indexing

两个外部索引选择大小4,然后在其中添加两个内部切片:

check[0,:,:,ells<=4]

给出的原因是,当高级索引由切片分隔时,可能存在歧义。但是,当其中一个索引是标量时(这是一个古老的反对意见),这种歧义的情况就更弱了。

我确定有人可以找到重复的SO。