广播(Broadcast)是 numpy 对不同形状(shape)的数组进行数值计算的方式, 对数组的算术运算通常在相应的元素上进行。即将一种运算由一种形状的数组传递到另一种形状的数组上。
如果两个数组 a 和 b 形状相同,即满足 a.shape == b.shape,那么 a*b 的结果就是 a 与 b 数组对应位相乘。这要求维数相同,且各维度的长度相同。
只有当数组形状不同时,才会触发广播机制
如令数a与一个数组相加 数a可以看成是一个特殊的数组,返回结果为数组内每个元素与数a相加。
import numpy as np
array01 = np.arange(1,13).reshape(3,4)
print(array01)
a=3
print(a+array01)
广播机制需要满足的规则:
- 让所有输入数组都向其中形状最长的数组看齐,形状中不足的部分都通过在前面加 1 补齐。
- 输出数组的形状是输入数组形状的各个维度上的最大值。
- 如果输入数组的某个维度和输出数组的对应维度的长度相同或者其长度为 1 时,这个数组能够用来计算,否则出错。
- 当输入数组的某个维度的长度为 1 时,沿着此维度运算时都用此维度上的第一组值。
一行三列只能与n行三列的数组相加
三行一列的数组只能与三行n列的数组相加
广播时,必须保持一对n的关系且其他行列相同
import numpy as np
a = np.array([[ 0, 0, 0],
[10,10,10],
[20,20,20],
[30,30,30]])
b = np.array([1,2,3])
print(a + b)
输出结果为
[[ 1 2 3]
[11 12 13]
[21 22 23]
[31 32 33]]
即b中的1 2 3分别与a的第一行到第四行相加传递