numpy/torch中的广播机制

广播的作用

用于描述如何在算术运算期间处理具有不同形状的数组
在满足特定限制的前提下,较小的数组“广播至”较大的数组,使两者形状互相兼容。
广播提供了一种矢量化数组操作的方法,以便在C而不是Python中进行循环。它可以在不制作不必要的数据副本的情况下实现这一点,通常导致高效的算法实现。然而,有些情况下广播是一个坏主意,因为它会导致内存使用效率低下,从而减慢计算速度。

广播的“前置条件”

尾尺寸(最后一个维度)开始,逐元素比较两个数组的形状,每一个维度均需满足以下三种情况之一。

  1. 相等
  2. 其中一个是1
  3. 其中一个不存在

举例说明

针对以上三种条件,运算结果会是这样:

  1. 如二者相等,比对下一个维度
  2. 维度“1”会变为较大的维度,如果两者均为1则不变
  3. 不存在的维度先补成1(比较纠结的点,一部分文献说是在运算之前,先通过“加维度1”将维度小的数组扩充成和维度较大数据一样,这样前置条件中只会有1和2,不会有3了,不过结果上是一样的),最后结果仍是较大的维度。
A      (4d array):  8 x 1 x 6 x 1
B      (3d array):      7 x 1 x 5
Result (4d array):  8 x 7 x 6 x 5

A      (2d array):      2 x 1
B      (3d array):  8 x 4 x 3 # second from last dimensions mismatched

Reference

【1】https://www.numpy.org.cn/user/basics/broadcasting.html
【2】https://zhuanlan.zhihu.com/p/86997775

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值