广播仅仅是一组用于在不同大小的数组上应用二元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,)
根据规则1,数组a的维数更少,所以我们用1填充在它的左边。
M.shape -> (2, 3)
a.shape -> (1, 3)

广播机制在Numpy中允许不同大小的数组进行二元运算,如加法、减法。它遵循三条规则:1) 形状较短的数组在前面用1填充;2) 如果某个维度不匹配但为1,则该维度被拉伸匹配;3) 任何维度大小不匹配且不等于1则报错。通过规则,数组可以在适当条件下扩展形状以执行运算,例如在不同尺寸的数组上逐元素相加。广播规则适用于所有二元ufunc,且不局限于加法操作。
863

被折叠的 条评论
为什么被折叠?



