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) 
'''

广播图解:

posted @ 2021-07-24 09:25  zeroy610  阅读(198)  评论(0编辑  收藏  举报