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