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 中。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • cs231n作业一中使用了了三种方法实现KNN算法:1.最为基础的双循环2.利用numpy的broadca机制实现...
    sony93阅读 3,304评论 0 0
  • 基础篇NumPy的主要对象是同种元素的多维数组。这是一个所有的元素都是一种类型、通过一个正整数元组索引的元素表格(...
    oyan99阅读 10,553评论 0 18
  • NumPy是Python中关于科学计算的一个类库,在这里简单介绍一下。 来源:https://docs.scipy...
    灰太狼_black阅读 4,994评论 0 5
  • 先决条件 在阅读这个教程之前,你多少需要知道点python。如果你想从新回忆下,请看看Python Tutoria...
    舒map阅读 7,444评论 1 13
  • 在使用Tensorflow的过程中,我们经常遇到数组形状不同的情况,但有时候发现二者还能进行加减乘除的运算,在这背...
    文哥的学习日记阅读 11,863评论 0 11