10.NumPy广播机制

NumPy 中的广播机制(Broadcast)旨在解决不同形状数组之间的算术运算问题。我们知道,如果进行运算的两个数组形状完全相同,它们直接可以做相应的运算。示例如下:

  1. import numpy as np
  2. a = np.array([0.1,0.2,0.3,0.4])
  3. b = np.array([10,20,30,40])
  4. c = a * b
  5. print(c)

输出结果如下:

[ 1.  4.  9. 16.]

但如果两个形状不同的数组呢?它们之间就不能做算术运算了吗?当然不是!为了保持数组形状相同,NumPy 设计了一种广播机制,这种机制的核心是对形状较小的数组,在横向或纵向上进行一定次数的重复,使其与形状较大的数组拥有相同的维度。

当进行运算的两个数组形状不同,Numpy 会自动触发广播机制。示例如下:

  1. import numpy as np
  2. a = np.array([[ 0, 0, 0],
  3. [10,10,10],
  4. [20,20,20],
  5. [30,30,30]])
  6. #b数组与a数组形状不同
  7. b = np.array([1,2,3])
  8. print(a + b)

输出结果为:

[[ 1  2  3]
[11 12 13]
[21 22 23]
[31 32 33]]

下图 1 :通过数组 a 、b 的运算展示了广播机制的实现流程。

Numpy数组广播机制
图1:Numpy 数组广播机制


4x3 的二维 a 数组 与 1x3 的一维 b 数组相加,本质上可以理解为 b 数组在纵向上向下拓展 3 次(将第一行重复 3 次),从而生成与 a 数组相同形状的数组,之后再与 a 数组进行运算。

posted @ 2022-08-02 17:13  随遇而安==  阅读(13)  评论(0编辑  收藏  举报