numpy数组广播的机制


Posted in Python onJuly 12, 2019

numpy数组的广播功能强大,但是也同时让人疑惑不解,现在让我们来谈谈其中的原理。

广播原则:

如果两个数组的后缘维度(即:从末尾开始算起的维度)的轴长相符或其中一方的长度为1,则认为它们是广播兼容的,广播会在缺失和(或)长度为1的轴上进行.

上面的原则很重要,是广播的指导思想,下面我们来看看例子。

1.其实在最简单的数组与标量数字之间的运算就存在广播,只是我们把它看作理所当然了。

numpy数组广播的机制

2.再看下一个例子,这个大家都会一致认为这是广播了

numpy数组广播的机制

根据广播原则:arr1的shape为(4,1),arr2的shape为(3,),所以会同时在两个轴发生广播,arr1的shape变成(4,3),而arr2的shape变成(4,3),所以结果也为(4,3).

其实代码中发生了下图描述的事情:

numpy数组广播的机制

3.同理,我们可以得到三维数组的广播情况

numpy数组广播的机制

根据广播原则分析:arr1的shape为(3,4,2),arr2的shape为(4,2),它们的后缘轴长度都为(4,2),所以可以在0轴进行广播,arr2的shape变为(3,4,2).

下面说明一下三维数组在各维度的广播形状需求:

numpy数组广播的机制

以上所有形状都可以发生广播,你可以用我们开篇所说的广播原则进行验证。

最后,再来说一个易错的实际例子。

numpy数组广播的机制

arr减去他在1轴上的平均值,会出错?看看为啥。

因为arr.mean(1)产生的shape为(4,),根据广播原则,较小的数组的后缘维度必须为1,

所以需要将arr.mean变成(4,1),你所期望的结果如下:

numpy数组广播的机制

参考:《利用Python进行数据分析》

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python抽象基类用法实例分析
Jun 04 Python
Python随手笔记第一篇(2)之初识列表和元组
Jan 23 Python
用Python实现命令行闹钟脚本实例
Sep 05 Python
Python判断某个用户对某个文件的权限
Oct 13 Python
Django重装mysql后启动报错:No module named ‘MySQLdb’的解决方法
Apr 22 Python
Python批处理删除和重命名文件夹的实例
Jul 11 Python
selenium+python截图不成功的解决方法
Jan 30 Python
TensorFlow基于MNIST数据集实现车牌识别(初步演示版)
Aug 05 Python
python中random.randint和random.randrange的区别详解
Sep 20 Python
python实现暗通道去雾算法的示例
Sep 27 Python
详解解Django 多对多表关系的三种创建方式
Aug 23 Python
python 闭包函数详细介绍
Apr 19 Python
Python的numpy库下的几个小函数的用法(小结)
Jul 12 #Python
python读取.mat文件的数据及实例代码
Jul 12 #Python
如何用Python破解wifi密码过程详解
Jul 12 #Python
python pip源配置,pip配置文件存放位置的方法
Jul 12 #Python
Python3 itchat实现微信定时发送群消息的实例代码
Jul 12 #Python
flask应用部署到服务器的方法
Jul 12 #Python
如何通过50行Python代码获取公众号全部文章
Jul 12 #Python
You might like
PHP中的类-什么叫类
2006/11/20 PHP
php mssql 时间格式问题
2009/01/13 PHP
zend framework文件上传功能实例代码
2013/12/25 PHP
php验证码实现代码(3种)
2015/09/07 PHP
jquery遍历input取得input的name
2009/04/27 Javascript
jquery选择器之内容过滤选择器详解
2014/01/27 Javascript
js中arguments,caller,callee,apply的用法小结
2014/01/28 Javascript
js如何调用qq互联api实现第三方登录
2014/03/28 Javascript
JavaScript打印网页指定区域的例子
2014/05/03 Javascript
JavaScript检测实例属性, 原型属性
2015/02/04 Javascript
深入探讨javascript函数式编程
2015/10/11 Javascript
Javascript闭包实例详解
2015/11/29 Javascript
JavaScript数据类型学习笔记
2016/01/25 Javascript
AngularJS通过$http和服务器通信详解
2016/09/21 Javascript
Angular之toDoList的实现代码示例
2017/12/02 Javascript
ajax请求+vue.js渲染+页面加载的示例
2018/02/11 Javascript
详解vue-cli3使用
2018/08/14 Javascript
深入Node TCP模块的理解
2019/03/13 Javascript
JavaScript实现五子棋游戏的方法详解
2019/07/08 Javascript
JavaScript数组类型Array相关的属性与方法详解
2020/09/08 Javascript
[01:12:27]EG vs Secret 2018国际邀请赛淘汰赛BO3 第二场 8.22
2018/08/23 DOTA
django静态文件加载的方法
2018/05/20 Python
Python matplotlib 画图窗口显示到gui或者控制台的实例
2018/05/24 Python
500行Python代码打造刷脸考勤系统
2019/06/03 Python
Python常用数据类型之间的转换总结
2019/09/06 Python
为什么说Python可以实现所有的算法
2019/10/04 Python
Python socket模块ftp传输文件过程解析
2019/11/05 Python
Python字典实现伪切片功能
2020/10/28 Python
Does C# support multiple inheritance? (C#支持多重继承吗)
2012/01/04 面试题
公司应聘求职信
2014/06/21 职场文书
万能检讨书
2015/01/27 职场文书
体检通知范文
2015/04/21 职场文书
关于战胜挫折的名言警句大全!
2019/07/05 职场文书
2019年“我为祖国点赞”演讲稿(3篇)
2019/09/26 职场文书
导游词之苏州寒山寺
2019/12/05 职场文书
学会Python数据可视化必须尝试这7个库
2021/06/16 Python