术语"广播"描述了 numpy 在算术运算期间如何处理不同形状的数组。较小的数组在较大的数组中"广播",以便它们具有兼容的形状。

如果使用形状完全相同的数组执行算术运算,则操作将逐个元素完成,如下所示如下例所示:

示例:

import numpy as np
Arr1 = np.array([1, 2, 3, 4, 5])
Arr2 = np.array([10, 20, 30, 40, 50])
Arr3 = Arr1 * Arr2

print(Arr3) 

上述代码的输出将是:

[ 10  40  90 160 250] 

当两个数组的形状不相同,则元素到元素的操作是不可能的。然而,numpy 提供了在这种情况下通过广播执行算术运算的能力。这会导致某些限制。

广播规则

广播两个数组遵循以下提到的规则:

  • 较小维度的数组在前面加上"1"它的形状。
  • 输出形状的每个维度的大小是该维度中输入大小的最大值。
  • 如果输入在特定维度中的大小,则可以在计算中使用输入与输出大小匹配或其值恰好为 1。
  • 如果输入的维度大小为 1,则该维度中的第一个数据条目将用于沿该维度的所有计算。
如果满足以下规则,则可以将广播应用于数组。
  • 数组具有完全相同的形状。
  • 数组具有相同的维数,每个维度的长度要么是公共长度,要么是 1。
  • 维度太少的数组可以在其形状中预先添加长度为 1 的维度。

示例:

在下面的示例中,在执行加法操作时,数组 Arr2 在数组 Arr1 之间广播。
import numpy as np
Arr1 = np.array([[0, 0, 0, 0],
                 [10, 10, 10, 10],
                 [20, 20, 20, 20]])
Arr2 = np.array([3, 5, 7, 8])
Arr3 = Arr1 + Arr2

print("Arr1:")
print(Arr1)

print("\nArr2:")
print(Arr2)

print("\nArr3:")
print(Arr3) 
上述代码的输出将是:
Arr1:
[[ 0  0  0  0]
 [10 10 10 10]
 [20 20 20 20]]

Arr2:
[3 5 7 8]

Arr3:
[[ 3  5  7  8]
 [13 15 17 18]
 [23 25 27 28]] 
NumPy 广播