pytorch与numpy的broadcast的理解

  • 此文章转载自:https://www.cnblogs.com/pied/p/8288856.html
  • 写的very nice!本搬运工做了点注释

broadcast 是 numpy 中 array 的一个重要操作。pytorch沿用了这个特点。

首先,broadcast 只适用于加减。

然后,broadcast 执行的时候,如果两个 array 的 shape 不一样,会先给**“短”的那一个,增加高维度“扩展”(broadcasting),比如,一个 2 维的 array,可以是一个 3 维 size 为 1 的 3维 array。【搬运工注1:从右往左进行check】【搬运工注2:可以看下面的举例1**来理解这个】
类似于: shape(1,3,2) = shape(3,2)

最后,比较两个 array(扩展后的),按照 dimension 从低到高,比较每一个维度的 size 是否满足下面两个条件之一:【搬运工作注3:可以看下面的例2理解这个】

  1. 相等

  2. 其中一个为 1

所以,举例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 之后的运算是怎样呢?举例2说明:

a = [ [0,1,2,3], [4,5,6,7] ]

b = [1,2,3,4]

a + b = [ [1,3,5,7], [5,7,9,11] ]
或可自己运行下面代码观察

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

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

import numpy as np 

a = np.arange(3)

b = np.arange(5)

a = a[:, np.newaxis]

print a
print b

print a+b
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值