手把手教你学Numpy,这些api不容错过
本文始发于个人公众号:TechFlow,原创不易,求个关注
今天是Numpy专题的第5篇文章,我们来继续学习Numpy当中一些常用的数学和统计函数。
基本统计方法
在日常的工作当中,我们经常需要通过一系列值来了解特征的分布情况。比较常用的有均值、方差、标准差、百分位数等等。前面几个都比较好理解,简单介绍一下这个百分位数,它是指将元素从小到大排列之后,排在第x%位上的值。我们一般常用的是25%,50%和75%这三个值,通过这几个值,我们很容易对于整个特征的分布有一个大概的了解。
前面三个指标:均值、方差、标准差都很好理解,我们直接看代码就行。
median和percentile分别是求中位数与百分位数,它们不是Numpy当中array的函数,而是numpy的库函数。所以我们需要把array当做参数传入。percentile这个函数还需要额外传入一个int,表示我们想要得到的百分位数,比如我们想要知道50%位置上的数,则输入50。
除了这些之外,我们还会经常用到sum,min,max,argmin,argmax这几个函数。sum,min,max很好理解,argmin和argmax的意思是获取最小值和最大值的索引。
这里返回的索引有点奇怪,和我们想的不同,居然不是一个二维的索引而是一维的。实际上numpy的内部会将高维数组转化成一维之后再进行这个操作,我们可以reshape一下数组来进行验证:
这些只是api的基本用法,numpy当中支持的功能不仅如此。我们观察一下这些函数会发现,它们的作用域都是一组数据,返回的是一组数据通过某种运算得到的结果。举个例子,比如sum,是对一组数据的价格。std计算的是一组数据的标准差,这样的函数我们称为聚合函数。
numpy当中的聚合函数在使用的时候允许传入轴这个参数,限制它聚合的范围。我们通过axis这个参数来控制,axis=0表示对列聚合,axis=1表示对行聚合。我们死记的话总是会搞混淆,实际上axis传入的也是一个索引,表示第几个索引的索引。我们的二维数组的shape是[行, 列],其中的第0位是行,第1位是列,可以认为axis是这个索引向量的一个索引。
我们可以来验证一下:
可以看到axis=0和axis=1返回的向量的长度是不同的,因为以列为单位聚合只有4列,所以得到的是一个1 x 4的结果。而以行为单位聚合有5行,所以是一个1 x 5的向量。
除了上面介绍的这些函数之外,还有cumsum和cumprod这两个api。其中cumsum是用来对数组进行累加运算,而cumprod是进行的累乘运算。只是在实际工作当中,很少用到,我就不展开细讲了,感兴趣的同学可以查阅api文档了解一下。
bool数组的方法
我们之前在Python的入门文章当中曾经提到过,在Python中True和False完全等价于1和0。那么在上面这些计算的方法当中,如果存在bool类型的值,都会被转化成1和0进行的计算。
我们灵活运用这点会非常方便,举个例子,假设我们要统计一批数据当中有多少条大于0。我们利用sum会非常方便:
bool数组除了可以应用上面这些基本的运算api之外,还有专门的两个api,也非常方便。一个叫做any,一个叫做all。any的意思是只要数组当中有一个是True,那么结果就是True。可以认为是Is there any True in the array的意思,同样,all就是说只有数组当中都是True,结果才是True。对应的英文自然是Are the values in the array all True。
这个只要理解了,基本上很难忘记。
排序
Python原生的数组可以排序,numpy当中的数组自然也不例外。我们只需要调用sort方法就可以排序了,不过有一点需要注意,numpy中的sort默认是一个inplace的方法。也就是说我们调用完了sort之后,原数组的值就自动变化了。
如果写成了arr = arr.sort()会得到一个None,千万要注意。
同样,我们也可以通过传入轴这个参数来控制它的排序范围,可以做到对每一列排序或者是对每一行排序,我们来看个例子:
这个是对列排序,如果传入0则是对行排序,这个应该不难理解。
集合api
numpy当中还提供了一些面向集合的api,相比于针对各种计算的api,这些方法用到的情况比较少。常用的一般只有unique和in1d。
unique顾名思义就是去重的api,可以返回一维array去重且排序之后的结果。我们来看个例子:
它等价于:
set(sorted(arr))
in1d是用来判断集合内的元素是否在另外一个集合当中,函数会返回一个bool型的数组。我们也可以来看个例子:
除了这两个api之外,还有像是计算并集并排序的union1d,计算差集的setdiff1d,计算两个集合交集并排序的intersect1d等等。这些api的使用频率实在是不高,所以就不赘述了。用到的时候再去查阅即可。
总结
今天我们聊了numpy当中很多常用的计算api,这些api在我们日常做机器学习和数据分析的时候经常用到。比如分析特征分布的时候,如果数据量很大是不适合作图或者是可视化观察的。这个时候可以从中位数、均值、方差和几个关键百分位点入手,再比如在我们使用softmax多分类的时候,也会用到argmax来获取分类的结果。
总之,今天的内容非常关键,在numpy整体的应用当中占比很高,希望大家都能熟悉它们的基本用法。这样即使以后忘记,用到的时候再查阅也还来得及。
今天的文章就是这些,如果喜欢本文,可以的话请点个关注,给我一点鼓励,也方便获取更多文章。
本文使用 mdnice 排版
手把手教你学Numpy,这些api不容错过的更多相关文章
- 手把手教你学Numpy,从此处理数据不再慌「一」
当当当,我又开新坑了,这次的专题是Python机器学习中一个非常重要的工具包,也就是大名鼎鼎的numpy. 所以今天的文章是Numpy专题的第一篇. 俗话说得好,机器学习要想玩的溜,你可以不会写Pyt ...
- 手把手教你学Numpy,搞定数据处理——收官篇
本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是Numpy专题第6篇文章,我们一起来看看Numpy库当中剩余的部分. 数组的持久化 在我们做机器学习模型的研究或者是学习的时候,在完成 ...
- 手把手教你学numpy,从此数据处理不再慌【三】
本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是numpy专题的第三篇,我们来聊聊numpy当中的索引. 上篇的末尾其实我们简单地提到了索引,但是没有过多深入.没有过多深入的原因也很 ...
- NN入门,手把手教你用Numpy手撕NN(三)
NN入门,手把手教你用Numpy手撕NN(3) 这是一篇包含极少数学的CNN入门文章 上篇文章中简单介绍了NN的反向传播,并利用反向传播实现了一个简单的NN,在这篇文章中将介绍一下CNN. CNN C ...
- 手把手教你学Dapr - 3. 使用Dapr运行第一个.Net程序
上一篇:手把手教你学Dapr - 2. 必须知道的概念 注意: 文章中提到的命令行工具即是Windows Terminal/PowerShell/cmd其中的一个,推荐使用Windows Termin ...
- 手把手教你学Dapr - 4. 服务调用
上一篇:手把手教你学Dapr - 3. 使用Dapr运行第一个.Net程序 介绍 通过使用服务调用,您的应用程序可以使用标准的gRPC或HTTP协议与其他应用程序可靠.安全地通信. 为什么不直接用Ht ...
- 手把手教你学Dapr - 5. 状态管理
上一篇:手把手教你学Dapr - 4. 服务调用 介绍 使用状态管理,您的应用程序可以将数据作为键/值对存储在支持的状态存储中. 您的应用程序可以使用 Dapr 的状态管理 API 使用状态存储组件来 ...
- 手把手教你学Dapr - 6. 发布订阅
上一篇:手把手教你学Dapr - 5. 状态管理 介绍 发布/订阅模式允许微服务使用消息相互通信.生产者或发布者在不知道哪个应用程序将接收它们的情况下向主题发送消息.这涉及将它们写入输入通道.同样,消 ...
- 手把手教你学Dapr - 9. 可观测性
目录 手把手教你学Dapr - 1. .Net开发者的大时代 手把手教你学Dapr - 2. 必须知道的概念 手把手教你学Dapr - 3. 使用Dapr运行第一个.Net程序 手把手教你学Dapr ...
随机推荐
- IE8/IE9/IE10打开网页后,自动设置浏览器模式为“IE8/IE9/IE10兼容性视图”
http://blog.snsgou.com/post-16.html 作者:SNSGOU 发布于:2013-07-17 22:23:05 分类:CSS/HTML 评论(0) 浏览(132 ...
- MySQL InnoDB索引介绍以及在线添加索引实例分析
引言:MySQL之所以能成为经典,不是没有道理的,B+树足矣! 一.索引概念 InnoDB引擎支持三种常见的索引:B+树索引,全文索引和(自适应)哈希索引.B+树索引是传统意义上的索引,构造类似二叉树 ...
- hdu6007 spfa+完全背包
题意:给你M,N,K,代表你有M点法力值,N个物品,K个制造方式 接下来N行,如果以1开头则代表既能卖又能合成,0代表只能卖. 然后K行,每行第一个数是要合成的东西,第二个数代表有几对,每对第一个数是 ...
- 【JVM】堆区域的一个详细了解并附带调优案例
话不多说,直接撸图: 1>Eden中通过可达性分析,存活下来的对象直接通过复制算法移动到From区域中,此时该对象的分代年龄加1: 2>当下一次虚拟机进行[Minor GC]时,会同时对[ ...
- Istio-架构
读书笔记整理 工作机制:分为控制面和数据面 控制面:Pilot, Mixer(接收来自Envoy上报的数据), Citadel(证书和密钥管理) 数据面:Envoy 工作流程: 自动注入 应用程序启动 ...
- 同一父进程下的子进程之间的通信(pipe通信)
首先对于fork命令 通过fork命令创建进程 父进程返回子进程id 子进程返回0 失败返回-1 对于pipe通讯机制 pipe通讯是半双工的 也就是说只能一方读一方写 题目中想要P1的输出作为 ...
- Leetcode 416分割等和子集
416. 分割等和子集 已知是个背包问题,由于可以等分为两部分,所以必定是个偶数. 一开始想到的是回溯法 bool helper(vector<int>&nums, int i, ...
- Linux、Ubuntu、CentOS安装和配置zsh
目录 01 zsh的安装 02 配置zsh 2.1 安装oh-my-zsh 2.2 查看oh-my-zsh目录 2.3 oh-my-zsh 插件的管理 2.3.1 添加插件 2.3.2 zsh-aut ...
- BZOJ1003 物流运输 题解
发现\(n,m\)很小,我们可以先把任意\(2\)天的最短路都给求出来,考虑\(DP\),设\(f[i][j]\)表示\(j+1\)~ \(i\)这几天内走的是最短路线的最优方案,显然最优情况下\(j ...
- 资源在windows编程中的应用----菜单
资源在Windows编程中的应用 资源 加速键.位图.光标.对话框.菜单.字符串.工具条 1.菜单的创建 菜单由以下组成部分: (1)窗口主菜单条 (2)下拉式菜单框 (3)菜单项热键标识 (4)菜单 ...