转自https://zhuanlan.zhihu.com/p/60365398
1、广播是从内向外的扩展元素的,所有需要将两个元素从后往前对比。
2、两个数组的相同位置维度大小不一样的时候,有一个数组是1就可以广播。
A = np.zeros((2,5,3,4))
B = np.zeros((3,1))
print((A+B).shape) # 输出:(2, 5, 3, 4)
A = np.zeros((2,5,3,4))
B = np.zeros((2,1,1,4))
print((A+B).shape) # 输出:(2, 5, 3, 4)
A = np.zeros((1))
B = np.zeros((3,4))
print((A+B).shape) # 输出(3,4)
# 下面是报错案例
A = np.zeros((2,5,3,4))
B = np.zeros((2,4,1,4))
print((A+B).shape)
ValueError: operands could not be broadcast together with shapes (2,5,3,4) (2,4,1,4)
为啥报错?因为A和B的第2维不相等。并且都不等于1.
3、利用 np.newaxis 新增一维的方法,让不能被广播的数组能够用广播。