Numpy的广播严格遵守以下规则:
规则1:如果两个数组的维度数不同,那么小维度数组的形状将会在最左边补1。
规则2:如果两个数组的形状在任何一个维度上都不匹配,那么数组的形状会沿着维度为1的维度扩展以匹配另外一个数组的形状。
规则3:如果两个数组的形状在任何一个维度上都不匹配并且没有任何一个维度等于1,那么会引发异常。
为了更清楚地理解这些规则,来看几个具体示例。
示例1:二维数组与一维数组相加:
M = np.ones((2,3)) # M = [[1 1 1] [1 1 1]]
a = np.arange(3) # a = [0 1 2]
print(M + a)
两个数组的形状如下:
M.shape = (2,3)
a.shape=(3,)
根据规则1,数组a的维度更小,所以在其左边补1:
M.shape = (2,3)
a.shape=(1,3)
M = [[1 1 1] [1 1 1]]
a = [[0 1 2]]
根据规则2,第1个维度不匹配,因此扩展这个维度以匹配数组:
M