您能帮助揭开以下 numpy 索引/切片行为的神秘面纱吗?谢谢!
arr = np.arange(60).reshape(3,4,5)
print(arr[2, :, 4]) #1
print(arr[[2], :, 4]) #2
print(arr[2, :, [4]]) #3
print(arr[[2], :, [4]]) #4
[44 49 54 59]
[[44 49 54 59]]
[[44 49 54 59]]
[[44 49 54 59]]
#1
是可以理解的,而当涉及到结果的形状((1,4) 数组)时,#2,#3,#4 对我来说真的很困惑。更具体地说,内部 []
什么时候会影响结果数组的维度?
基本思想是,就像
x[0]
是数组的第一个元素一样,您可以使用 x[[1, 3, 4, 6]]
创建一个新数组,取出数组的四个元素。请注意,此表示法为数组添加了一个维度。
请注意,无论使用
[]
还是参数是 numpy 数组,都会得到相同的结果。
如果索引中有多个这样的数组或列表,它们将合并在一起。 因此你可以使用:
x[[1, 2],[3, 4]]
获取元素 x[1,3]
和 x[2, 4]
作为二元素数组。有许多 numpy 函数返回数组列表,其中第一个数组是第一个索引,第二个数组是第二个索引,依此类推。您可以直接在索引表示法中使用这些数组。