array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])如果我们运行以下语句
x[1:, [2,0,1]]我们得到以下结果
array([[ 6, 4, 5],
[10, 8, 9]])据numpy的医生说:
高级索引始终是广播,并作为一个整体进行迭代:
我不明白指数和广播的配对是如何发生的。
发布于 2020-07-01 08:57:48
来自NumPy用户指南,https://numpy.org/doc/stable/user/basics.indexing.html#combining-index-arrays-with-slices
将切片转换为索引数组np.array,该索引数组与索引数组一起广播,以产生结果数组。
在我们的示例中,片np.array([1,2]) 1:被转换为具有形状(1,2)的索引数组。这是行索引数组。下一个索引数组(列索引数组) np.array(2,0,1)具有形状(3,2)
索引数组的形状不同。但它们可以被广播成相同的形状。广播行索引数组以匹配列索引数组的形状。
发布于 2022-03-16 12:11:27
所选答案不正确。
[2,0,1]确实有形状的(3,),并且不会在广播期间被扩展。1:意味着在广播之前首先对数组进行切片。在广播过程中,只需将切片:想象为每次运行0d标量的占位符。所以我们得到:
形状(2,0,1)= (3,) () =() -> (1,) -> (3,)
因此,在概念上将[:]扩展为(3,),如下所示:
x[1,1,1,2,0,1] =6 4 5 x[2,2, 2,0,1] = 10 8 9
最后,我们需要将结果堆回
[6 4 5]https://stackoverflow.com/questions/62498731
复制相似问题