NumPy 广播

17 Mar 2025 | 阅读 2 分钟

在数学运算中,我们可能需要考虑不同形状的数组。NumPy 可以执行涉及不同形状数组的此类操作。

例如,如果我们考虑矩阵乘法运算,如果两个矩阵的形状相同,那么此操作将很容易执行。但是,如果形状不相似,我们可能也需要进行操作。

考虑以下示例来乘以两个数组。

示例

输出

[ 2  8 18 32 50 72 98]

但是,在上面的示例中,如果我们考虑不同形状的数组,我们将得到如下所示的错误。

示例

输出

ValueError: operands could not be broadcast together with shapes (7,) (8,) 

在上面的示例中,我们可以看到两个数组的形状不相似,因此它们不能一起相乘。NumPy 可以通过使用广播的概念来执行此类操作。

在广播中,较小的数组被广播到较大的数组,以使它们的形状彼此兼容。

广播规则

如果满足以下情况,则可以进行广播。

  1. 较小的维度数组可以在其形状中附加“1”。
  2. 每个输出维度的尺寸是该维度中输入尺寸的最大值。
  3. 如果输入在特定维度的尺寸与输出尺寸匹配,或者其值为 1,则可以在计算中使用输入。
  4. 如果输入大小为 1,则第一个数据条目用于沿该维度的计算。

如果满足以下规则,则广播可以应用于数组。

  1. 所有输入数组具有相同的形状。
  2. 数组具有相同数量的维度,并且每个维度的长度要么是公共长度,要么是 1。
  3. 具有较少维度的数组可以在其形状中附加“1”。

让我们看一个广播的例子。

示例

输出

printing array a..
[[ 1  2  3  4]
 [ 2  4  5  6]
 [10 20 39  3]]

printing array b..
[2 4 6 8]

Adding arrays a and b ..
[[ 3  6  9 12]
 [ 4  8 11 14]
 [12 24 45 11]]
NumPy Broadcasting
下一话题NumPy 数组迭代