前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >numpy中的broadcasting

numpy中的broadcasting

作者头像
狼啸风云
修改2022-09-03 19:48:30
7880
修改2022-09-03 19:48:30
举报
文章被收录于专栏:计算机视觉理论及其实现

broadcast是numpy中array的一个重要操作。

首先,broadcast只适用于加减。

然后,broadcast执行的时候,如果两个array的shape不一样,会先给“短”的那一个,增加高维度“扩展”(broadcasting),比如,一个2维的array,可以是一个3维size为1的3维array。

类似于: shape(1,3,2) = shape(3,2)

最后,比较两个 array(扩展后的),按照 dimension 从低到高,比较每一个维度的 size 是否满足下面两个条件之一:

  1. 相等
  2. 其中一个为 1

所以,举例,下列 array 是否可以进行 broadcast:

  1. shape(4, 3) 与 shape(3,) :shape(3) 可以 broadcast 为 shape(1, 3),那么,从低到高: d0(3 === 3), d1(其中一个为 1)。结论,可以,结果的为 shape(4, 3)
  2. shape(6,5,4,3)与 shape(5, 4, 3):shape(5, 4, 3) 可以 broadcast 为 shape(1,5,4,3),那么,从低到高:d0( 3 === 3), d1(4 === 4), d2(5===5),d3(其中一个为 1)。结论,可以,结果为 shape(6, 5, 4, 3)。
  3. shape(2,3) 与 shape(5,4,3):shape(2,3) 可以 broadcast 为 shape(1, 2, 3),那么,从低到高:d0( 3 == 3), d1(4!=2)。结论,不能进行 broadcast。
  4. shape(4,1)与shape(5):shape(5)可以broadcast为shape(1,5),那么,从低到高: d0( 其中一个为 1), d1(其中一个为1)。结论,可以进行broadcast,结果为shape(4, 5) 。

broadcast 之后的运算是怎样呢?举例说明:

代码语言:javascript
复制
a = [ [0,1,2,3], [4,5,6,7] ]

b = [1,2,3,4]

a + b = [ [1,3,5,7], [5,7,9,11] ]

或可自己运行下面代码观察:

代码语言:javascript
复制
import numpy as np

a = np.arange(12)
b = a.reshape(3,2,2)

c = np.arange(4)
d = c.reshape(2, 2)

e = np.arange(2)

print(d+b)

print(e+b)

Output:
----------------------------------------
[ 0  1  2  3  4  5  6  7  8  9 10 11]




[[[ 0  1]
  [ 2  3]]

 [[ 4  5]
  [ 6  7]]

 [[ 8  9]
  [10 11]]]




[0 1 2 3]




[[0 1]
 [2 3]]




[0 1]




[[[ 0  2]
  [ 4  6]]

 [[ 4  6]
  [ 8 10]]

 [[ 8 10]
  [12 14]]]




[[[ 0  2]
  [ 2  4]]

 [[ 4  6]
  [ 6  8]]

 [[ 8 10]
  [10 12]]]
-----------------------------------

还有下面一种特殊情况,即扩展低维度为 1 的情况下:

代码语言:javascript
复制
import numpy as np 

a = np.arange(3)

b = np.arange(5)

a = a[:, np.newaxis]


print(a)
print(b)
print(a+b)

Output:
--------------
[[0]
 [1]
 [2]]
[0 1 2 3 4]
[[0 1 2 3 4]
 [1 2 3 4 5]
 [2 3 4 5 6]]
--------------
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/12/09 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档