首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Numpy高级索引:广播是如何发生的?

Numpy高级索引:广播是如何发生的?
EN

Stack Overflow用户
提问于 2020-06-21 12:49:57
回答 2查看 210关注 0票数 2
代码语言:javascript
复制
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])

如果我们运行以下语句

代码语言:javascript
复制
x[1:, [2,0,1]]

我们得到以下结果

代码语言:javascript
复制
array([[ 6,  4,  5],
      [10,  8,  9]])

据numpy的医生说:

高级索引始终是广播,并作为一个整体进行迭代:

我不明白指数和广播的配对是如何发生的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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)

  • 行索引数组形状(1,2)
  • 列索引数组形状(3,2)

索引数组的形状不同。但它们可以被广播成相同的形状。广播行索引数组以匹配列索引数组的形状。

票数 -1
EN

Stack Overflow用户

发布于 2022-03-16 12:11:27

所选答案不正确。

  1. 在这里,[2,0,1]确实有形状的(3,),并且不会在广播期间被扩展。
  2. 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]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62498731

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档