这个“广播机制”解释最简单、正确、无误导

很多python支持库中(numpy和mxnet下的ndarray)均支持数据广播处理,即形状不同的张量可进行元素数学运算,包括+、-、*、/。
那么,广播机制触发条件到底是啥呢?
下面是小白的心路历程:
首先:首次在python中接触广播机制时,看不懂啊,只能网上查,啥是广播机制;然后你就会发现一个奇怪的名词叫“后缘维度(trailing dimension)”。WTF,这是啥?很多博主都说是“即从末尾开始算起的维度”,好吧,我还是看不懂,问度娘,竟然找不到“后缘”的名词解释。行,先不求甚解,看看博主给的具体例子,试试能不能从例子中总结出来广播触发机制吧。
然后:甩出一句话:广播主要发生在两种情况,一种是两个数组的维数不相等,但是它们的后缘维度的轴长相符,另外一种是有一方的长度为1。然后给出2-3个图文并茂的例子,教大家如何广播。例子很简单啊,一度让我总结出触发广播的 条件1:(后缘维度的轴长相符),就是指最后一维的轴长相等。
然而:自己动手敲代码,发现并不行啊,例如形状为(2,2)和(3,2)的张量,就是不会触发广播机制啊。怎么回事?
再看看博主给的例子,例子都很巧妙,完美的避开了同一维度下,两个轴长不等的情况。
那么:还是去搜啥是trailing dimension吧,还是要从根本上知道广播机制的触发条件。好在,搜到了https://pytorch.org/docs/stable/notes/broadcasting.html,这是pytorch官方说明文档,算是找到源头了。Yeah
最后:根据对官方解释,广播机制触发条件为:
Two tensors are “broadcastable” if the following rules hold:
(1)Each tensor has at least one dimension.
(2)When iterating over the dimension sizes, starting at the trailing dimension,
the dimension sizes must either be equal, one of them is 1, or one of them
does not exist.
翻译过来就是:广播机制触发时,必须同时满足如下2个条件:
(1)每个张量都必须至少有1个维度。直白点就是每个张量都不能为空
(2)从最后一维向第一维迭代的过程中,同一维度下,各张量的轴长必须相等,或者其中1个轴长为1,或者其中1个轴长为空。
直白点:两个条件如下:
(1)两个张量都必须不为空;
(2)将两个张量的形状信息右对齐,从右向左观看同一维度下,张量的轴长必须相等,或者其中一个轴长为1,或者其中一个轴长为空。

举2个例子:
1、张量形**状分别为(5,3,4,**1)、(3,1,1),那么肯定满足条件1的;然后对形状信息右对齐,变成(5,3,4,1)和(,3,1,1);从右向左看,1-1(相等),4-1(其中一个为1),3-3(相等),5-空(其中一个为空)。满足条件2.
所以,这两个张量是会触发广播机制的。
2、张量形状分别为(5,3,4,1)、(3,3,1),那么肯定满足条件1的;然后对形状信息右对齐,变成(5,3,4,1)和(,3,3,1);从右向左看,1-1(相等),4-3(不等,均不为1,均不为空),不满足条件2.
所以,这两个张量是不会触发广播机制的。

至此:终于搞清楚了张量广播机制,多谢官方文档!

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值