首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

python库之numpy(三)

broadcasting是个很有用的机制,可以让numpy中的数组工作在不同的shape上。通常会有两个大小不一样的数组,我们会想用小数组来表示作用在大数组上的乘积次数。

比如,如果想要在矩阵的每行加上一个常量向量,可以按如下方式:

上面的方式是ok的,但是当x很大的时候,循环计算在python中是特别低效的。下面给出更高效的方式。

numpy的broadcasting可以有不需要多维复制向量v的方式,以下是例子:

尽管x的维度是(4,3),v的维度是(3,),代码y = x + v 是可以借助broadcasting成功运行的。实质上,只有v的维度也是(4,3)才可以成功执行,其中v的每一行都是原来v的一个副本,然后这个求和就是基于元素的简单矩阵求和。

broadcasting两个数组需要遵循下面几个原则:

如果数组没有相同的维度,保证较小的数组与大数组最里层的维度相同;

两个数组有相同维度称之为可计算的,否则需其中一个数组的维度为1;

如果数组在所有维度都是可计算的,那就能broadcast;

broadcasting之后,每个数组都会当成相同维度的输入;

在一个数组某个维度为1,另一个数组相应维度大于1的情况,第一个数组会像做过copy操作一样;

如果上面的解释有疑问,您可以查看下面文档:

https://docs.scipy.org/doc/numpy/user/basics.broadcasting.html

支持broadcasting的函数称之为universal函数,从下面文档可以找到详情:

https://docs.scipy.org/doc/numpy/reference/ufuncs.html#available-ufuncs

下图是部分broadcasting的应用:

broadcasting可以让你的代码更加简洁和高效,所以推荐掌握。

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

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券