目录

Python还债日记之广播机制


python中的广播机制

1. 定义

广播机制是对不同维度进行计算的方式,这种机制会执行维度进行自动对齐的操作,在python中,针对位运算(包括加减乘除),广播机制会自动将输入的矩阵或者张量维度进行计算,然后按照广播的方式,将维度对齐,这样可以有效地帮助代码变简洁

2. 举例分析

  1. 向量加张量

    1
    2
    3
    4
    5
    6
    7
    
    import numpy as np
    
    vect = np.array([1, 2, 3])
    scalar = 1
    print(vect + scalar)
    
    [2, 3, 4]
    

    最终的输出结果相当于向量加上了一个经过广播之后的同维度的向量

  2. 矩阵加向量

    1
    2
    3
    4
    5
    6
    7
    8
    
    import numpy as np 
    
    a = np.array([[ 0, 0, 0],
               [10,10,10],
               [20,20,20],
               [30,30,30]])
    b = np.array([1,2,3])
    print(a + b)
    

    输出是

    1
    2
    3
    4
    
    [[ 1  2  3]
     [11 12 13]
     [21 22 23]
     [31 32 33]]
    

    https://www.runoob.com/wp-content/uploads/2018/10/image0020619.gif

   

3. 机制总结

以输入两个不同维度的数组为例,两个数组的shape分别是a和b,那么广播机制的执行规则是

  • 判断shape长度

    如果两个数组shape的长度不一致,就说明数组的维度不统一,那么,按照shape最长的数组看齐,其他数组的shape不足的补1

    1
    
    (2, 3) + (3) ->  (2, 3) + (1, 3)
    
  • 比较两数组各个维度的长度

    当两数组的shape对齐之后,就逐维度比较两个数组的长度大小,应该满足以下条件:

    1. 同一维度,两数组的长度相同

    2. 同一维度,两数组的长度有一个是1

    如果不满足,则两数组不能做shape广播

  • 当某一维度上的长度是1,那么就将这个维度上的值复制N份,这个N是另外一个数组的对应维度的长度,然后按位运算