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中lambda的用法及其与def的区别解析
Jul 28 Python
python实现从字典中删除元素的方法
May 04 Python
python中类和实例如何绑定属性与方法示例详解
Aug 18 Python
python把数组中的数字每行打印3个并保存在文档中的方法
Jul 17 Python
python调用虹软2.0第三版的具体使用
Feb 22 Python
Python集中化管理平台Ansible介绍与YAML简介
Jun 12 Python
Python中的相关分析correlation analysis的实现
Aug 29 Python
Python3 Tensorlfow:增加或者减小矩阵维度的实现
May 22 Python
python2和python3哪个使用率高
Jun 23 Python
Python文件夹批处理操作代码实例
Jul 21 Python
Django数据模型中on_delete使用详解
Nov 30 Python
Django项目如何获得SSL证书与配置HTTPS
Apr 30 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 ftp文件上传函数(基础版)
2010/06/03 PHP
Php获取金书网的书名的实现代码
2010/06/11 PHP
ThinkPHP 3.2 数据分页代码分享
2014/10/14 PHP
PHP 中魔术常量的实例详解
2017/10/26 PHP
PHP attributes()函数讲解
2019/02/03 PHP
自己实现ajax封装示例分享
2014/04/01 Javascript
谈一谈javascript闭包
2016/01/28 Javascript
Bootstrap里的文件分别代表什么意思及其引用方法
2017/05/01 Javascript
JavaScript中splice与slice的区别
2017/05/09 Javascript
jQuery插件开发发送短信倒计时功能代码
2017/05/09 jQuery
深究AngularJS中ng-drag、ng-drop的用法
2017/06/12 Javascript
Angularjs中的验证input输入框只能输入数字和小数点的写法(推荐)
2017/08/16 Javascript
Vue项目中设置背景图片方法
2018/02/21 Javascript
layui使用表格渲染获取行数据的例子
2019/09/13 Javascript
Vue实现手机计算器
2020/08/17 Javascript
windows如何把已安装的nodejs高版本降级为低版本(图文教程)
2020/12/14 NodeJs
Node.js中的异步生成器与异步迭代详解
2021/01/31 Javascript
Python标准库之itertools库的使用方法
2017/09/07 Python
Python数据结构之单链表详解
2017/09/12 Python
Django压缩静态文件的实现方法详析
2018/08/26 Python
使用Python的SymPy库解决数学运算问题的方法
2019/03/27 Python
python实现windows倒计时锁屏功能
2019/07/30 Python
Python 进程操作之进程间通过队列共享数据,队列Queue简单示例
2019/10/11 Python
numpy:np.newaxis 实现将行向量转换成列向量
2019/11/30 Python
Python解析多帧dicom数据详解
2020/01/13 Python
Python中and和or如何使用
2020/05/28 Python
python中pow函数用法及功能说明
2020/12/04 Python
html5 css3 动态气泡按钮实例演示
2012/12/02 HTML / CSS
加拿大消费电子和手机购物网站:The Source
2017/01/28 全球购物
舞蹈教育学专业推荐信
2013/11/27 职场文书
九年级家长会邀请函
2014/01/15 职场文书
房屋出售授权委托书
2014/10/12 职场文书
西安兵马俑导游词
2015/02/02 职场文书
2015年社区平安建设工作总结
2015/05/13 职场文书
2016高考感言
2015/08/01 职场文书
SpringBoot 整合mongoDB并自定义连接池的示例代码
2022/02/28 MongoDB