1. 进行广播适用的情况:
broadcast 是numpy对不同形状(shape)的数组进行数值计算的方式,当不同形状(shape)的数组进行计算,就会自动出发广播机制
通常进行算术计算的数组形状需要完全相同,即:
a.shape=b.shape,此时计算结果是a与b数组对应位置数字计算;
但是在满足一定条件的情况下a.shape=b.shape的条件可以适当放松:
## 1. 1 一个数组与一个标量(单个数字)
```powershell
1) : 一个数组与一个标量:
运算过程中可以认为标量被拉伸到与数组形状(shape)相同
注意:
(1) 拉伸的比喻是概念性的,实际数据并未发生复制,因此与真正的数组相比
内存占用更少,计算更高效
import numpy as np
a = np.arange(6).reshape(3, 2)
b1 = np.array([[2, 2],
[2, 2],
[2, 2]])
b2 = 2
print('a+b1: ', a+b1, sep='\n')
print('a+b2: ', a+b2, sep='\n')
虽然数组b1与标量b2与数组a相加的计算结果相同,且在理解上可以认为标量b2被拉伸成数组b1的形状,但是使用数组b2占用内存更少,计算更高效。
1.2 其中一个数组为包含单个值的一维数组
a = np.arange(12).reshape(3, 1, 4)
b2 = np.array([3])
print(a)
print('a+b2: ', a+b2, sep='\n')
1.3 数组中对应轴的长度相同
a = np.arange(12).reshape(3, 1, 4)
b2 = np.ones((1,4))
print('a:', a, sep='\n')
print('a+b2: ', a+b2, sep='\n')
a = np.arange(12).reshape(3, 1, 4)
b2 = np.ones((4))
print('a:', a, sep='\n')
print('a+b2: ', a+b2, sep='\n')
1.4 对应轴的长度不同,但其中一个长度为1
a = np.arange(6).reshape(2, 3, 1)
b2 = np.ones((1, 4))
print('a:', a, sep='\n')
print('a+b2: ', a+b2, sep='\n')
2. 总结:
看两个数组之间进行运算时能否广播,需要从aixs的最大值向最小值方向查看,将两个数组形状右对齐,依次比较,若对应位置的两个数组形状值相同,则可以广播;若数值不同,则其中一个数组形状值为1,可以广播;否则无法广播。