Numpy 广播

在 NumPy 中,我们可以对不同形状的数组执行数学运算。形状较小的数组会扩展以匹配较大数组的形状。这就是所谓的广播。

让我们看一个例子。

array1 = [1, 2, 3]
array2 = [[1], [2], [3]]

array1 是一个一维数组,而 array2 是一个二维数组。让我们在这两个不同形状的数组之间执行加法运算。

result = array1 + array2

在这里,NumPy 会自动广播一维数组 array1 的大小,以执行与二维数组 array2 的逐元素加法。


示例:NumPy 广播

import numpy as np

# create 1-D array
array1 = np.array([1, 2, 3])

# create 2-D array
array2 = np.array([[1], [2], [3]])

# add arrays of different dimension
# size of array1 expands to match with array2
sum = array1 + array2

print(sum)

输出

[[2 3 4]
 [3 4 5]
 [4 5 6]]

在这个示例中,我们对两个不同维度的数组进行了相加。NumPy 会自动扩展一维数组 array1 的大小以匹配二维数组 array2 的大小。

然后,在两个二维数组之间执行逐元素加法。


广播的兼容性规则

广播仅适用于兼容的数组。NumPy 从右到左比较一组数组维度。

要进行广播,每一组维度都必须与数组兼容。一组维度长度兼容,当

  • 其中一个长度为 1,或者
  • 它们相等。

让我们看一个例子。

array1 = shape(6, 7)
array2 = shape(6, 1)

这里,array1array2 是维度分别为 (6,7)(6,1) 的数组。

维度长度 71 是兼容的,因为其中一个为 1

同样,66 是兼容的,因为它们是相同的。

由于两组维度都兼容,因此这些数组是可广播的。


可广播形状的示例

现在,我们将列出可广播和不可广播的形状。

可广播形状

  • (6, 7)(6, 7)
  • (6, 7)(6, 1)
  • (6, 7)(7, )

两个数组不必具有相同的维度即可进行广播。

最后一组形状是可广播的,因为最右边的维度都是 7

不可广播形状

  • (6, 7)(7, 6)
  • (6, 7)(6, )

最后一组形状不可广播,因为最右边的维度不相同。


与标量的广播

我们还可以对数组和标量(单个值)执行数学运算。例如,

import numpy as np

# 1-D array
array1 = np.array([1, 2, 3])

# scalar
number = 5

# add scalar and 1-D array
sum = array1 + number

print(sum)

输出

[6 7 8]

在此示例中,NumPy 会自动将标量 number 扩展为一维数组,然后执行逐元素加法。

我们的高级学习平台,凭借十多年的经验和数千条反馈创建。

以前所未有的方式学习和提高您的编程技能。

试用 Programiz PRO
  • 交互式课程
  • 证书
  • AI 帮助
  • 2000+ 挑战