跳至主要內容

广播

blacklad大约 1 分钟PythonPythonNumPy

广播

一、简介

广播描述了 NumPy 在算术运算期间如何处理具有不同形状的数组。在某些约束下,较小的数组将广播到较大的数组中,以便它们具有兼容的形状。

a = np.array([1.0, 2.0, 3.0])
b = 2.0
print(a*b)
[2. 4. 6.]

标量在算术运算过程中 b 被拉伸为一个形状与 a 相同的数组。拉伸类比只是概念上的,NumPy 实际不会复制数据。

image-20240630131104213
image-20240630131104213

二、规则

如果两个数组操作,NumPy会对两个数组的对象进行比较

从最后一个维度开始,比较两个数组的大小:

  1. 如果维度大小相同,继续比较下一个维度。
  2. 如果一个维度的大小是1,则沿着该维度进行广播。
  3. 如果维度大小不同且不为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)
image-20240630132750181
image-20240630132750181

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,) 
image-20240630132905213
image-20240630132905213
上次编辑于:
贡献者: blacklad