NumPy学习第六课(2):广播(Broadcast)

131 阅读2分钟

前言

各位朋友们,今天我们学习NumPy中的广播。听到这个词语,是不是有些蒙圈呢?别蒙,这个广播可不是指村里播放消息的那玩意儿。那么NumPy中的广播到底是什么?

广播的含义

广播(Broadcast)是 numpy 对不同形状(shape)的数组进行数值计算的方式, 对数组的算术运算通常在相应的元素上进行,为了具有兼容性,一般都是小的数组阵列在大的数组阵列上进行广播的。也就类似于是一种融合吧,我是这样理解的。

示意图

这里我们简单的画一个示意图进行讲解:(PS:画图功底不行,凑合着看吧!)

image.png

上图大概解释一下:就是把数组b在数组a上运行3遍以后,得出了数组c,我们可以在编辑器中进行一个验证,看看是否正确:

import numpy as np
a = np.arange(9).reshape(3, 3)
print('数组a')
print(a)
print('\n')
b = np.arange(3)
print('数组b')
print(b)
# 数组a和数组b进行广播后
c = a + b
print('数组c')
print(c)


# 输出结果:
# 数组a
# [[0 1 2]
#  [3 4 5]
#  [6 7 8]]
# 
# 
# 数组b
# [0 1 2]
# 数组c
# [[ 0  2  4]
#  [ 3  5  7]
#  [ 6  8 10]]

numpy广播的规则

在NumPy中,当我们想要对数组进行元素级操作时,通常需要保证操作的数组具有相同的形状或者能够通过广播规则来兼容。广播(Broadcasting)是一种可以使得不同形状的数组进行元素级操作的机制。

广播的规则如下:

  1. 如果两个数组的维度数不同,那么小维度数组会根据需要进行复制来匹配大维度数组的形状。
  2. 如果两个数组在某个维度上的长度相同,或其中一个长度为1,那么这两个数组在这个维度上是兼容的。
  3. 如果不满足上述条件,则不能进行广播。

例如,当我们想要将一个形状为(3,)的数组加到一个形状为(3, 4)的数组上时,小数组会在第二个维度(列)上复制自身,以匹配大数组的形状。