点击上方 蓝字 关注我们
广播(broadcasting)是通用函数另一个非常有用的功能,它能够操纵不同大小和形状的数组,这就是我们所说的广播。
01
广播简介
对于同样大小的数组,二元运算符是对相应元素逐个计算,如例1所示。
广播允许这些二元运算符可以用于不同大小的数组。
例1:
import numpy as np
a = np.array([0, 1, 2])
b = np.array([5, 5, 5])
a + b
# array([5, 6, 7])
如例2所示,可以简单地将一个标量(可以认为是一个零维数组)和一个数组相加。这个操作,我们可以认为是将数值5扩展或者重复至数组[5,5,5],然后执行加法。Numpy广播功能的好处是,这种对值的重复实际上没有发生,但是这是一种很好理解的广播模型。
例2:
#
a + 5
# array([5, 6, 7])
我们也可以把这个原理拓展到更高维度的数组,下面例子展示了一个一维数组和一个二维数组相加的结果。在例3中一个二维数组被拓展了或者被广播了。他沿着第二个维度扩展,拓展到匹配M数组的形状。
例3:
M = np.ones((3, 3))
M
# array([[ 1., 1., 1.],
# [ 1., 1., 1.],
# [ 1., 1., 1.]])
M + a
# array([[ 1., 2., 3.],
# [ 1., 2., 3.],
# [ 1., 2., 3.]])
以上数组理解起来还比较容易,更复杂的情况涉及到对两个数组的同时广播,如例4所示。
例4:
a = np.arange(3)
b = np.arange(3)[:, np.newaxis]
print(a)
print(b)
# [0 1 2]
# [[0]
# [1]
# [2]]
a + b
# array([[0, 1, 2],
# [1, 2, 3],
#