a = np.zeros((5,4,3))
v = np.ones((5, 4), dtype=int)
data = a[v]
shp = data.shape
此代码给出 shp==(5,4,4,3)
我不明白为什么。怎么才能输出更大的数组呢?对我来说毫无意义,希望得到解释。
最佳答案
这被称为 advanced indexing .高级索引允许您根据 N 维索引选择输入数组中的任意元素。
让我们用另一个例子来更清楚地说明:
a = np.random.randint(1, 5, (5,4,3))
v = np.ones((5, 4), dtype=int)
假设在这种情况下 a
是:
array([[[2, 1, 1],
[3, 4, 4],
[4, 3, 2],
[2, 2, 2]],
[[4, 4, 1],
[3, 3, 4],
[3, 4, 2],
[1, 3, 1]],
[[3, 1, 3],
[4, 3, 1],
[2, 1, 4],
[1, 2, 2]],
...
通过使用 np.ones
数组进行索引:
print(v)
array([[1, 1, 1, 1],
[1, 1, 1, 1],
[1, 1, 1, 1],
[1, 1, 1, 1],
[1, 1, 1, 1]])
您只需沿第一个轴将 a
索引为 1
的次数与 v
的次数相同。换句话说,当你这样做时:
a[1]
[[4, 4, 1],
[3, 3, 4],
[3, 4, 2],
[1, 3, 1]]
您正在沿第一个轴进行索引,因为没有指定沿其他轴的索引。这与执行 a[1, ...]
相同,即沿剩余轴截取完整切片。因此,通过使用由 1 组成的 2D
数组进行索引,您会将上述 2D
数组 (5, 4)
次堆叠在一起,从而得到形状为 (5, 4, 4, 3)
的 ndarray。或者换句话说,a[1]
,形状为 (4,3)
,堆叠 5*4=20
次。
因此,在这种情况下,您将得到:
array([[[[4, 4, 1],
[3, 3, 4],
[3, 4, 2],
[1, 3, 1]],
[[4, 4, 1],
[3, 3, 4],
[3, 4, 2],
[1, 3, 1]],
...
关于python - 使用较低暗淡的索引数组索引 numpy 数组会产生比两者都更高暗淡的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56947819/