术语"广播"描述了 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]]