【发布时间】:2019-09-13 17:25:26
【问题描述】:
我有一个 4-D NumPy 数组,轴为 x,y,z,t。我想取对应于 t=0 的切片并在 y 轴上排列顺序。
我有以下
import numpy as np
a = np.arange(120).reshape(4,5,3,2)
b = a[:,[1,2,3,4,0],:,0]
b.shape
我得到 (5, 4, 3) 而不是 (4,5,3)。
当我进入时
aa = a[:,:,:,0]
bb = aa[:,[1,2,3,4,0],:]
bb.shape
我得到了预期的 (4,5,3)。有人能解释一下为什么第一个版本会交换前两个维度吗?
【问题讨论】:
-
这是一个混合基本(切片)和高级索引的情况。它在主索引页面上进行了描述。切片尺寸放在最后。
-
@hpaulj 在第二个示例中,切片没有放在最后。能否解释一下原因或提供链接?
-
是中间的切片触发重新排序。该链接解释说,通过将切片尺寸放在后面可以解决潜在的歧义。我已经看到了这样的论点,即在一个索引是标量的情况下,这种歧义并不真正存在,但显然这很难彻底解决。幸运的是,您的两步索引绕过了这一点。它可能会更混乱,但不应该更慢。
标签: python numpy multidimensional-array numpy-ndarray numpy-slicing