广播仅仅是一组用于在不同大小的数组上应用二元ufuncs(加法、减法、乘法等)的规则。
对于相同大小的数组,二元操作按元素逐元素执行。
In[1]: import numpy as np
In[2]: a = np.array([0, 1, 2])
b = np.array([5, 5, 5])
a + b
Out[2]: array([5, 6, 7])
广播允许在不同大小的数组上执行这些类型的二元操作。
在NumPy中,广播遵循一组严格的规则来确定两个数组之间的操作:
规则1:如果两个数组在维度的数量上有差异,那么维度较少的数组的形状就会被用1填充在它的前导(左)边。
规则2:如果两个数组的形状在任何维度上都不匹配,但等于1,那么在这个维度中,形状为1的数组将被拉伸以匹配另一个形状。
规则3:如果在任何维度上,大小都不一致,且两者都不等于1,就会出现错误。
下面看例子:
In[1]: import numpy as np
In[2]: M = np.ones((2, 3))
a = np.arange(3)
In [3]: M.shape
Out[3]: (2, 3)
In [4]: a.shape
Out[4]: (3,)