解析 NumPy 的广播机制

题图:fab-lentz-253417-unsplash

这是第 202 篇原创

建议阅读时间:5 分钟

如果对您有帮助,欢迎点赞和转发

优秀的知识分享氛围,需要你我共同努力。

1 问答记录系列

实践出真知,相互讨论碰撞出思想的火花。【原创互助答疑群】内有的问答很精彩。于是脑子里闪现出一个想法,为什么不把整个的问答过程记录总结下来,分享给更多的小伙伴呢? 于是就有了这个推送系列模块,相信大家能从中受益。欢迎小伙伴在群内积极参与讨论。

2 Python的 * 和 NumPy的广播

几天前,一个小伙伴问:Python的 * 和广播机制是一回事吗?它们相似,但实则不同!

1) 先了解下python中的list * 标量,结果是复制对应的元素,如下所示:

list * 标量等于按元素或按行的复制。

2) NumPy 的广播机制,先看一个例子,如下:

上面的例子,xx 的 shape是(4,1),y的 shape(5,),NumPy支持的这类操作,被称为广播机制。

3 NumPy广播 通用规则

注意,不是任意形状间的ndarray都能做广播,必须满足一定的约束条件。对两个NumPy的 ndarray 进行操作时,NumPy 会比较形状,开始于最靠后的维度(如5*4*6,最靠后的维度长度是6)。当以下情形出现时,维度是兼容的:

1)相等

2)其中一个长度为 1

可以看到,广播是按照右对齐的方式,其中长度为1的维度被自动广播。

4 NumPy广播 好处

先看一个例子。一个ndarray和一个标量相乘,这是广播机制:

如果我们不按照广播机制,我们可以这样写:

标量值 b 在计算时被伸展为 与 a 一样的形状,伸展后 b 的每一个元素都是原来标量值的复制。实际上,NumPy 并不需要真的复制这些标量值,所以广播运算在内存和计算效率上更高效。

5 欢迎入群讨论

以上错误之处,有疑问的地方,或者待优化改进之处,欢迎公号内留言、微信群内留言,微信群内已分享完整的PPT。

微信群规定,群内严禁分享推文,只做交流讨论。欢迎扫描群主微信,加入原创互助答疑微信群。请注明:加群

最近推文:

探索下去,迎接未知的精彩。。。Python神经网络| 一篇很棒的实战笔记,附源码牢记初心,就是保持内心的几分纯真3分钟理解 支持向量机中最出神的第一笔

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180606G00BU300?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码关注腾讯云开发者

领取腾讯云代金券