MXNet中NDArray中的广播运算条件

问题

《动手学深度学习》(By Aston Zhang, Mu Li, Zachary C.Lipton, Alexander J.Smola)中介绍NDArray中的广播运算时并没有说清楚广播运算的条件。但是,此运算在此书后续代码中广泛使用,结合网络上的搜索,特别详解如下。

详解

情况一:两个形状相同的NDArray按元素运算,不需要广播机制。

情况二:当形状不同时,这两个NDArray按元素运算还有可能进行

条件是:这两个NDArray的形状要“兼容”。所谓“兼容”是指:

为了确定两个形状是否是可兼容的,需要从最后开始往前逐个比较它们的维度(dimensions)大小。比较过程中,如果两者的对应维度相同,或者其中之一(或者全是)等于1,比较继续进行直到最前面的维度。否则,你将看到ValueError错误出现("operands could not be broadcast together with shapes ...")。

当其中之一的形状的维度超出范围(例如,a1 的shape=(2,3,4)而a2的shape=(3,4),当a1的2超出a2范围),此时Numpy将会使用1进行比较(如将a2.shape替换为(1,3,4))直到另一个也超出dim范围。

一旦Numpy确定两者的形状是可兼容的,最终结果的形状就成了每个维度上取两者之间最大的形状尺寸。

举例1

A=nd.arange(3).reshape((3,1))
B=nd.arange(2).reshape((1,2))
A+B可以进行,结果的形状为(3,2)

举例2

a=nd.arange(6).reshape((1,6))
b=nd.arange(8).reshape((8,1))
A+B可以进行,结果的形状为(8,6)

举例3

a=nd.arange(6).reshape((1,6))
b=nd.arange(8).reshape((4,2,1))

A+B可以进行,结果的形状为(4,2,6)

反例

a=nd.arange(6).reshape((3,2))
b=nd.arange(8).reshape((8,1))
A+B不可以进行,抛出错误!
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值