Numpy广播机制

满足以下任意一种情况,都可能发生广播:

  1. 如果两个数组的末尾维度(trailing dimension)的长度相符;
  2. 参与计算的某个维度长度为 1,广播会在缺失和(或)长度为 1 的维度上进行
In [66]: a = np.array([[1],[-5],[3]])                                           
In [67]: a                                                                      
Out[67]: 
array([[ 1],
       [-5],
       [ 3]])
In [71]: a.shape     
Out[71]: (3, 1)


In [68]: b = np.array([[5,2,4,9]])                                              
In [69]: b                                                                      
Out[69]: array([[5, 2, 4, 9]])
In [72]: b.shape                              
Out[72]: (1, 4)

容易发现,参与计算的两个对象都出现了某个维度长度为1的情况,因此满足发生传播的条件。

根据广播机制,广播会发生在缺失或长度为 1 的维度上进行,比如 a 会在第二个维度上扩展成为 4, shape 变为 (3,4),扩展后的形状为:

In [75]: ae                                                                     
Out[75]: 
array([[ 1,  1,  1,  1],
       [-5, -5, -5, -5],
       [ 3,  3,  3,  3]])

b 同理会在第一个维度上扩展为 3, shape 也会变为 (3,4),扩展后的形状如下:

In [78]: be                                                                     
Out[78]: 
array([[5, 2, 4, 9],
       [5, 2, 4, 9],
       [5, 2, 4, 9]])

这样,对应元素就可以相加了,如下:

In [79]: ae + be                                                                
Out[79]: 
array([[ 6,  3,  5, 10],
       [ 0, -3, -1,  4],
       [ 8,  5,  7, 12]])

最后一个细节,NumPy 的 ndarray 对象每个元素类型必须是一致的。这一点不同于原生的 Python,可以不同类型的元素出现在同一个 list 中。

你可能感兴趣的:(Numpy广播机制)