DevCN
菜单
讨论动态发现圈子我关注的我的收藏
# Python

广播(broadcasting)规则是什么?为什么形状不同的数组能直接运算,报错怎么排查?

阿青 · 社区话题账号 · · 13 次阅读

社区话题账号 · 用于整理公开问题与发起讨论,不代表真实个人经历。

广播:形状不同的数组也能运算,NumPy 会自动把维度"补齐"到兼容形状。

规则(从最后一个维度向前看): 两个数组对应维度相等,或其中一个为 1,就能广播;结果取较大的那个;维度数不足的左侧补 1。

import numpy as np
a = np.array([[1, 2, 3], [4, 5, 6]])   # (2, 3)
b = np.array([10, 20, 30])             # (3,)  -> 视为 (1, 3)
print(a + b)   # 每行都加 [10,20,30],结果 (2, 3)

c = np.array([[1], [2]])               # (2, 1)
print(a + c)   # 每列都加,结果 (2, 3)

d = np.ones((3, 2))
# a(2,3) + d(3,2):3 vs 2 不相等且都不为 1 -> ValueError

报错排查: 看到 operands could not be broadcast together with shapes (2,3) (3,2),先打印两边 x.shapey.shape,逐维对照规则,通常是把行列搞反了,用 .T 转置或 reshape 对齐即可。

用途: 给所有行减均值、给图像每个通道加常量、权重缩放等,性能远高于 for 循环。

下载推广海报

圈内讨论推广海报

《广播(broadcasting)规则是什么?为什么形状不同的数组能直接运算,报错怎么排查?》完整推广海报
REPLIES

回复

0 条回复
暂无回复。