gpt4 book ai didi

python - 切片 3d numpy 数组返回奇怪的形状

转载 作者:太空狗 更新时间:2023-10-29 22:21:58 26 4
gpt4 key购买 nike

如果我用一组坐标对二维数组进行切片

>>> test = np.reshape(np.arange(40),(5,8))
>>> coords = np.array((1,3,4))
>>> slice = test[:, coords]

然后我的切片具有我期望的形状

>>> slice.shape
(5, 3)

但是如果我用 3d 数组重复这个

>>> test = np.reshape(np.arange(80),(2,5,8))
>>> slice = test[0, :, coords]

那么现在的形状是

>>> slice.shape
(3, 5)

有什么不同的原因吗?分离索引返回我期望的形状

>>> slice = test[0][:][coords]
>>> slice.shape
(5, 3)

为什么这些 View 会有不同的形状?

最佳答案

slice = test[0, :, coords]

是简单的索引,实际上是说“获取第一个坐标的第 0 个元素,第二个坐标的所有元素,以及第三个坐标的 [1,3,4]”。或者更准确地说,取坐标 (0,whatever,1) 并将其作为我们的第一行,(0,whatever,2) 并将其作为我们的第二行,以及 (0,whatever,3) 并将其作为我们的第三行。有 5 个任意项,所以你最终得到 (3,5)。

你举的第二个例子是这样的:

slice = test[0][:][coords]

在这种情况下,您查看的是 (5,8) 数组,然后获取第 1、3、4 行的第 1、第 3 和第 4 个元素,因此您最终得到 (5,3 ) 数组。

编辑讨论 2D 案例:

在 2D 情况下,其中:

>>> test = np.reshape(np.arange(40),(5,8))
>>> test
array([[ 0, 1, 2, 3, 4, 5, 6, 7],
[ 8, 9, 10, 11, 12, 13, 14, 15],
[16, 17, 18, 19, 20, 21, 22, 23],
[24, 25, 26, 27, 28, 29, 30, 31],
[32, 33, 34, 35, 36, 37, 38, 39]])

行为相似。

案例一:

>>> test[:,[1,3,4]]
array([[ 1, 3, 4],
[ 9, 11, 12],
[17, 19, 20],
[25, 27, 28],
[33, 35, 36]])

只是选择第 1、3 和 4 列。

案例二:

>>> test[:][[1,3,4]]
array([[ 8, 9, 10, 11, 12, 13, 14, 15],
[24, 25, 26, 27, 28, 29, 30, 31],
[32, 33, 34, 35, 36, 37, 38, 39]])

取数组的第一个、第三个和第四个元素,即行。

关于python - 切片 3d numpy 数组返回奇怪的形状,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31414527/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com