numpy的广播机制
对于两个形状相同的数组,可以对相应位置的数进行运算。
点击查看代码
import numpy as np
a=np.arange(10)
b=np.arange(2,12)
print(a+b)
print(a-b)
print(a*b)
print(a//b)#取整
print(a^b)
'''
[ 2 4 6 8 10 12 14 16 18 20]
[-2 -2 -2 -2 -2 -2 -2 -2 -2 -2]
[ 0 3 8 15 24 35 48 63 80 99]
[0 0 0 0 0 0 0 0 0 0]
[ 2 2 6 6 2 2 14 14 2 2]
'''
当两个数组形状不同时,(如果可以)将触发广播机制。广播可以理解为数组沿着某一维度的拓展,从而达到形状相同。
例如,将一个常量与数组相加如a+5,相当于将5拓展至和a形状相同的一个数组进行运算。
对两个数组进行广播的规则是:
1.补充缺失维度。找到维度最大的数组,维度较小的数组在左边补上1.
例如a的形状是(3,1,5),b的形状是(4,5),则先将b拓展为(1,4,5).
2.用已有值填充缺失值。将两个数组沿着维度为1的方向拓展至于另一个数组相匹配。
例如a->(3,4,5),b->(3,4,5).两个数组形状现在相同。可以进行运算了。
3.如果两个数组不匹配的维度上都不等于1,则无法广播,运算会出现异常。
这应当是更常见的现象。例如(3,4)和(4,3);(2,9)和(2,3)等等。
点击查看代码
import numpy as np
a=np.arange(2).reshape(1,1,2)
print(a)
b=np.arange(6).reshape(3,2)
print(a+b)
'''
[[[0 1]]]
[[[0 2]
[2 4]
[4 6]]]
'''
a=np.arange(8).reshape(2,4)
b=np.arange(2).reshape(2,1)
print(a+b)
'''
[[0 1 2 3]
[5 6 7 8]]
'''
a=np.arange(12).reshape(3,4)
b=np.arange(2,14).reshape(4,3)
print(a*b)
'''
ValueError: operands could not be broadcast together with shapes (3,4) (4,3)
'''
广播图解: