numpy/torch中的广播机制

发布时间:2024年01月21日

广播的作用

用于描述如何在算术运算期间处理具有不同形状的数组
在满足特定限制的前提下,较小的数组“广播至”较大的数组,使两者形状互相兼容。
广播提供了一种矢量化数组操作的方法,以便在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

文章来源:https://blog.csdn.net/qq_43543940/article/details/135727873
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。