广播 Numpy 数组以进行算术运算

发布日期:2026-07-20 01:06:03  来源 : 杭州电子商务研究院    浏览量 :0
杭州电子商务研究院 发布日期:2026-07-20 01:06:03  
0

介绍

在理解广播是什么以及它是如何工作的之前,让我们先了解如何对 Numpy 数组执行算术运算。任何两个数组之间的算术运算总是逐个元素执行的。也就是说,如果你添加两个数组AB ,则A的每个第 i 个元素都会添加到B的第 i 个元素以生成数组C

如果两个数组的形状相同,则一切都会正常进行。如果数组的形状不同,则无法进行逐个元素的操作。但是在实际应用中,您很少会遇到形状相同的数组。因此,Numpy 还提供了对具有不同形状的数组进行算术运算的能力。这种能力称为广播

广播规则

虽然你可以对具有广泛形状的数组进行算术运算,但仍存在一些限制。因此,在查看一些示例之前,了解广播规则会有所帮助。通常,如果满足以下条件,则可以在两个不同形状的数组之间进行算术运算:

  • 每个维度的大小相同,或者
  • 其中一个维度的大小为 1

甚至可以使用这些规则在十维数组和二维数组之间执行运算。数组的维数无关紧要。

让我们看一个例子来了解它是如何工作的。例如,我有两个数组,AB,如下所示:

      A = np.arange(12).reshape(3,4)
B  = np.arange(4)
A
    

输出:

      array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])
    
      B
    

输出:

      array([0, 1, 2, 3])
    

以及它们的形状:

      A.shape
B.shape
    

输出:

      (3, 4)
(4,)
    

请注意,数组A是二维数组,数组B是一维数组或标量值。当你添加这两个数组时,Numpy 会将较小的数组广播到较大的数组,操作成功。

广播的工作原理

广播从尾随维度开始进行比较,然后向前导维度移动。

在上例中,尾随维度的大小匹配,因此它继续检查下一个维度。由于数组B是一维数组,因此它没有前导维度。因此 Numpy 会自动将值 '1' 广播到数组B中缺失的维度。因此,在数组广播之后:

从图中可以看出,广播规则是令人满意的,并且 Numpy 允许两个数组之间进行算术运算。因此,如果添加它们:

      A+B
    

输出:

      array([[ 0,  2,  4,  6],
       [ 4,  6,  8, 10],
       [ 8, 10, 12, 14]])
    

使用二维数组进行广播

我们将B创建为二维数组,而不是标量值。

      B = np.arange(3).reshape(3,1)
B.shape
    

输出:

      (3, 1)
    

如果你打印B

      B
    

输出:

      array([[0],
       [1],
       [2]])
    

数组AB 的形状分别为 (3,4) 和 (3,1)。广播规则满足两个数组中的每个维度,因此可以进行算术运算。

      A+B
    

输出:

      array([[ 0,  1,  2,  3],
       [ 5,  6,  7,  8],
       [10, 11, 12, 13]])
    

使用三维阵列进行广播

我有一个三维Numpy数组A

      A = np.arange(24).reshape(2,3,4)
A
    

输出:

      array([[[ 0,  1,  2,  3],
        [ 4,  5,  6,  7],
        [ 8,  9, 10, 11]],

       [[12, 13, 14, 15],
        [16, 17, 18, 19],
        [20, 21, 22, 23]]])
    
      A.shape
    

输出:

      (2,3,4)
    

一维数组B

      B = np.arange(4)
B
    

输出:

      array([0, 1, 2, 3])
    
      B.shape
    

输出:

      (4,)
    

这里再次进行算术运算,因为 Numpy 将较小的数组B广播到较大的数组A 。因此,广播之后,数组AB的形状分别变为 (2,3,4) 和 (1,1,4)。它们遵循广播条件,算术运算成功。

      A+B
    

输出:

      array([[[ 0,  2,  4,  6],
        [ 4,  6,  8, 10],
        [ 8, 10, 12, 14]],

       [[12, 14, 16, 18],
        [16, 18, 20, 22],
        [20, 22, 24, 26]]])
    

使用两个三维数组进行广播

我有两个三维数组,AB。数组A与之前的形状相同,形状为 (2,3,4)。数组B定义为:

      B = np.arange(8).reshape(2,1,4)
    

并且具有以下形状:

      B.shape
    

输出:

      (2,1,4)
    

并且具有以下值:

输出:

      array([[[0, 1, 2, 3]],
       [[4, 5, 6, 7]]])
    

要确定这两个数组是否可以进行算术运算,只需重新查看规则。前导维度和尾随维度匹配。并且,对于另一个维度,其中一个维度为 1。因此可以进行算术运算。

      A+B
    

输出:

<div class="code-blo
以上内容来自杭州电子商务研究院推送
分享到:

长按或扫码识别 分享给好友

长按或扫码识别 分享给好友
关于我们
热门推荐
合作伙伴
免责声明:本站部分资讯来源于网络,如有侵权请及时联系客服,我们将尽快处理
Copyright © 2025-2027 ToB产业网址导航 公安备案 浙公网安备33010602013138号 浙ICP备16025413号-9
支持 反馈 关注 数据