当我尝试以稍微不同的方式访问多维数组时,我得到了我不理解的不同结果。
当我运行时:
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)。
最佳答案
这是混合高级和基本索引的示例:
两个外部索引选择大小4,然后添加两个内部切片:
check[0,:,:,ells<=4]
给出的原因是,当高级索引由切片分隔时,存在潜在的歧义。但当其中一个索引是标量时,这种歧义的情况就较弱(这是一个古老的反对意见)。
我确信有人可以找到重复的 SO。
关于python - 多维数组无需询问即可自行转置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55522478/