广播
大约 1 分钟PythonPythonNumPy
广播
一、简介
广播描述了 NumPy 在算术运算期间如何处理具有不同形状的数组。在某些约束下,较小的数组将广播到较大的数组中,以便它们具有兼容的形状。
a = np.array([1.0, 2.0, 3.0])
b = 2.0
print(a*b)
[2. 4. 6.]
标量在算术运算过程中 b
被拉伸为一个形状与 a
相同的数组。拉伸类比只是概念上的,NumPy 实际不会复制数据。

二、规则
如果两个数组操作,NumPy会对两个数组的对象进行比较
从最后一个维度开始,比较两个数组的大小:
- 如果维度大小相同,继续比较下一个维度。
- 如果一个维度的大小是1,则沿着该维度进行广播。
- 如果维度大小不同且不为1,就会抛出异常
ValueError: operands could not be broadcast together with shapes ...
三、广播数组
将一维数组添加到二维数组
a = np.array([[ 0.0, 0.0, 0.0],
[10.0, 10.0, 10.0],
[20.0, 20.0, 20.0],
[30.0, 30.0, 30.0]])
b = np.array([1.0, 2.0, 3.0])
print(a+b)

将 b
的长度改为 4 后,和 a
中的第一行无法对齐,抛出异常。
a = np.array([[ 0.0, 0.0, 0.0],
[10.0, 10.0, 10.0],
[20.0, 20.0, 20.0],
[30.0, 30.0, 30.0]])
b = np.array([1.0, 2.0, 3.0, 4.0])
print(a+b)
Traceback (most recent call last):
File "***.py", line 148, in <module>
print(a+b)
ValueError: operands could not be broadcast together with shapes (4,3) (4,)
