广播是指不同形状的数组之间执行算数运算的方式,需要遵循4个原则:
1.让所有输入数组都向其中shape最长的数组看齐,shape中不足的部分都通过在前面加1补齐
2.输入数组的shape是输入数组shape的各个轴上的最大值
3.如果输入数组的某个轴和输出数组的对应轴的长度相同或者其长度为1时,这个数组能够用来计算,否则出错。
4.当输入数组的某个轴的长度为1时,沿着此轴运算时都用此轴上的第一组值。
import numpy as np
# 创建数组
arr1 = np.array([[0, 0, 0, 0], [1, 1, 1, 1], [2, 2, 2, 2], [3, 3, 3, 3]])
print('arr1:', arr1)
print('arr1形状:', arr1.shape)
arr2 = np.array([[1, 2, 3, 4]])
print('arr2:', arr2)
print('arr2形状:', arr2.shape)
arr3 = np.array([[1, 2, 3, 4], [0, 1, 2, 3]])
print('arr3:', arr3)
print('arr3形状:', arr3.shape)
# 执行上述两个数组相加
arr_new = arr1 + arr2
print('arr_new:', arr_new)
# 不满足广播机制
arr_new = arr1 + arr3
print('arr_new:', arr_new)
"""
让所有的shape向最长的看齐
arr1 (2,4,5)
arr2 (4,1) 补齐 (1,4,1)
arr3 (5,) 补齐 (1,5,1)
"""