NumPy - 广播

  • 简述

    术语broadcasting指的是 NumPy 在算术运算过程中处理不同形状数组的能力。数组上的算术运算通常在相应的元素上完成。如果两个数组的形状完全相同,那么这些操作就可以顺利执行。
  • 示例 1

    
    import numpy as np 
    a = np.array([1,2,3,4]) 
    b = np.array([10,20,30,40]) 
    c = a * b 
    print c
    
    它的输出如下 -
    
    [10   40   90   160]
    
    如果两个数组的维度不同,则元素到元素的操作是不可能的。然而,由于广播能力,在 NumPy 中仍然可以对形状不相似的数组进行操作。较小的数组是broadcast到较大数组的大小,以便它们具有兼容的形状。
    如果满足以下规则,则可以广播 -
    • 数组更小ndim而另一个则在其形状中以“1”开头。
    • 输出形状的每个维度中的大小是该维度中输入大小的最大值。
    • 如果输入在特定维度中的大小与输出大小匹配或其值恰好为 1,则可以在计算中使用输入。
    • 如果输入的维度大小为 1,则该维度中的第一个数据条目将用于沿该维度的所有计算。
    一组数组被称为broadcastable如果上述规则产生有效结果并且以下之一为真 -
    • 数组具有完全相同的形状。
    • 数组具有相同的维数,并且每个维的长度是公共长度或 1。
    • 维度太少的数组可以在其形状前面加上长度为 1 的维度,因此上述属性是正确的。
    以下程序显示了广播的示例。
  • 示例 2

    
    import numpy as np 
    a = np.array([[0.0,0.0,0.0],[10.0,10.0,10.0],[20.0,20.0,20.0],[30.0,30.0,30.0]]) 
    b = np.array([1.0,2.0,3.0])  
       
    print 'First array:' 
    print a 
    print '\n'  
       
    print 'Second array:' 
    print b 
    print '\n'  
       
    print 'First Array + Second Array' 
    print a + b
    
    该程序的输出如下 -
    
    First array:
    [[ 0. 0. 0.]
     [ 10. 10. 10.]
     [ 20. 20. 20.]
     [ 30. 30. 30.]]
    Second array:
    [ 1. 2. 3.]
    First Array + Second Array
    [[ 1. 2. 3.]
     [ 11. 12. 13.]
     [ 21. 22. 23.]
     [ 31. 32. 33.]]
    
    下图演示了数组如何b被广播变得兼容a.
    广播