- 可以参考很多博客:
- 具体规则
NumPy广播机制(Broadcasting) - 褚维芜的文章 - 知乎
https://zhuanlan.zhihu.com/p/262166150
numpy的广播(Broadcasting) - 忆臻的文章 - 知乎
https://zhuanlan.zhihu.com/p/35010592
等等
具体规则总结起来规则如下:
-
对齐
所有输入数组都向其中 shape 最长的数组 对齐, 然后
(S1). 先不管维数为 空 和 1 的那几个 维度 上的值, 进入 (S2).
(S2). 比较对应 (除去 (S1) 中提到的维度) 维度 上的数值,
(I) 如果不相等, 不能进行 broadcasting, 直接结束.
(II) 如果相等进入 (S3).
(S3). shape 中不足的部分都通过在前面加 1 补齐, 也即在 对齐 后, 维度 为 空 的补充 1, 进入下一步 2. 广播 -
广播 (broadcasting)
维度 中形状为 1 的数组将被拉伸以匹配另一个数组对应维度形状. -
输出数组的 shape 是输入数组 shape 的各个轴上的最大值.
进一步解释:
注意这里说的是数组的 shape.例1:
A1.shape = (4,2,3,2), B1.shape = (2,3), 因为 A1 的 shape 最长, 那么应该向 A1 看齐. 也就是所谓的 向右看齐 规则, 如计算 A1+B1 时
- (S1):
4, 2, 3, 2
2, 3- (S2): 因为 维度 上的值不相等, 不能 broadcasting, 直接 (报错) 结束.
例2:
A2.shape = (4,2,3,2), B2.shape = (2,1,2), 计算 C2 = A2 + B2 时, 首先 向右看齐
- (S1):
4, 2, 3, 2
2, 1, 2- (S2): 因为 维度 上的值相等, 进入 (S3).
- (S3): shape 中不足的部分都通过在前面加 1 补齐
4, 2, 3, 2
1, 2, 1, 2最终 C2.shape = (4,2,3,2).



