numpy之统计函数和布尔数组方法
统计函数
可以通过numpy的统计函数对整个数组或者某个轴向的数据进项统计计算。
所谓的轴向,其实就是n维向量的某一维。或者说某一行,某一列。
sum
对数组(向量)中全部或某个轴向的元素求和,长度为0,则sum
为0.
mean
算数平均数,作用范围同sum
,长度为0,结果为NaN。
In [1]: import numpy as np
In [2]: x = np.arange(9).reshape(3,3)#二维
In [3]: x
Out[3]:
array([[0, 1, 2],
[3, 4, 5],
[6, 7, 8]])
In [4]: x.sum()
Out[4]: 36
In [5]: np.sum(x[0])
Out[5]: 3
In [6]: np.sum(x[:,0])
Out[6]: 9
In [7]: x.mean()
Out[7]: 4.0
In [8]: np.mean(x[0])
Out[8]: 1.0
In [9]: np.mean(x[:,1])
Out[9]: 4.0
In [10]: y = np.arange(18).reshape(2,3,3)#三维
In [11]: y
Out[11]:
array([[[ 0, 1, 2],
[ 3, 4, 5],
[ 6, 7, 8]],
[[ 9, 10, 11],
[12, 13, 14],
[15, 16, 17]]])
In [12]: np.sum(y)
Out[12]: 153
In [13]: np.mean(y)
Out[13]: 8.5
In [14]: np.sum(y[0])
Out[14]: 36
In [15]: np.sum(y[:,0])
Out[15]: 33
可以发现,sum,mean
不但能作为数组的实例方法调用,还可以作为Numpy函数调用。
另外,numpy
的mean
,sum
函数还可以接受一个axis
参数,用于计算该轴向的参数值,咳咳,敲黑板,重点来了,什么轴向?
In [21]: x #2维
Out[21]:
array([[0, 1, 2],
[3, 4, 5],
[6, 7, 8]])
In [22]: x.sum(axis=0)
Out[22]: array([ 9, 12, 15])
In [23]: x.sum(axis=1)
Out[23]: array([ 3, 12, 21])
In [24]: y #3维
Out[24]:
array([[[ 0, 1, 2],
[ 3, 4, 5],
[ 6, 7, 8]],
[[ 9, 10, 11],
[12, 13, 14],
[15, 16, 17]]])
In [25]: y.sum(axis=0)
Out[25]:
array([[ 9, 11, 13],
[15, 17, 19],
[21, 23, 25]])
In [26]: y.sum(axis=1)
Out[26]:
array([[ 9, 12, 15],
[36, 39, 42]])
In [27]: y.sum(axis=2)
Out[27]:
array([[ 3, 12, 21],
[30, 39, 48]])
In [28]: y.sum(axis=3)
ValueError: 'axis' entry is out of bounds
经过试验,可以发现,
没有axis
参数表示全部相加,axis=0
表示按列相加,axis=1
表示按照行的方向相加。 axis = 2
,也是行相加,不过代表的是2维程度的相加。
另外,输入axis = 3
,返回了错误,这说明,axis
参数的维度总是比数组低一层。
另外,axis
还可以接受一个元组。
In [30]: x.sum(axis=(0,1))
Out[30]: 36
In [30]: x.sum(axis=(0,1))
Out[30]: 36
In [31]: y.sum(axis=(0,1))
Out[31]: array([45, 51, 57])
In [32]: y.sum(axis=(0,1,2))
Out[32]: 153
In [33]: y.sum(axis=(1,2,0))
Out[33]: 153
可以发现,输入元组,实现了行和列的先后相加,拿x来说,
axis=(0,1)
代表了先进行列相加,再将列相加的结果进行行相加,
所以最后的结果和全部求和的结果是一致的。
而且,结果与其顺序是没有关系的。
std、var
分别为标准差和方差,自由度是可以进行调整的(默认为n)
min、max
最小值最大值
argmin、argmax
最小值,最大值索引
cumsum
所有元素的累计和
cumprod
所有元素的累计积
以上这些函数,也可以接受参数axis
,并且用法和上方的mean,sum
基本一致。
但是argmin、argmax、cumsum、cumprod
不接受元组。
自由度这一点有待进一步确定。
结合布尔型数组
以上这些方法还可以结合布尔型数组来使用。因为,在这些方法中,布尔值会被强制转换为0和1。
因此,sum
可以对向量中的True值进行计数。如:
In [39]: k = np.random.randn(50)
In [40]: np.sum(k > 0)
Out[40]: 27
除此外,对于布尔型数组,还有两个特别有用的方法:any,all
。
any
用于测试数组(向量)中是否存在True。
all
用于确定数组中是否全是True。
In [41]: arr = np.random.randn(10)
In [42]: arr
Out[42]:
array([-0.77695399, -1.04211228, 0.85516427, -0.04749936, -1.32314252,
-0.59968117, 1.93582735, 0.08567928, -1.10820476, 1.2410364 ])
In [43]: arr1 = arr>0
In [44]: arr1
Out[44]: array([False, False, True, False, False, False, True, True, False, True], dtype=bool)
In [45]: arr1.any()
Out[45]: True
In [46]: arr1.all()
Out[46]: False
numpy之统计函数和布尔数组方法的更多相关文章
- NumPy 之 ndarray 多维数组初识
why 回顾我的数据分析入门, 最开始时SPSS+EXCEL,正好15年初是上大一下的时候, 因为统计学的还蛮好的, SPSS傻瓜式操作,上手挺方便,可渐渐地发现,使用软件的最不好的地方是不够灵活, ...
- numpy 中不常用的一些方法
作者:代码律动链接:https://zhuanlan.zhihu.com/p/36303821来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 挑战 1:引入 numpy ...
- Numpy的介绍与基本使用方法
1.什么是Numpy numpy官方文档:https://docs.scipy.org/doc/numpy/reference/?v=20190307135750 NumPy是一个功能强大的Pytho ...
- NumPy之:ndarray多维数组操作
NumPy之:ndarray多维数组操作 目录 简介 创建ndarray ndarray的属性 ndarray中元素的类型转换 ndarray的数学运算 index和切片 基本使用 index wit ...
- Javascript数组方法(译)
在JavaScript中,数组可以使用Array构造函数来创建,或使用[]快速创建,这也是首选的方法.数组是继承自Object的原型,并且他对typeof没有特殊的返回值,他只返回'object'. ...
- ECMAScript 5中新增的数组方法
ECMAScript 5中定义了9个新的数组方法,用于遍历.映射.过滤.检测.简化和搜索数组. 在开始介绍之前,很有必要对这几个新增的数组方法做一个概述.首先,大多数方法的第一个参数接收一个函数,并且 ...
- js 数组方法总结
Array数组: length属性 可通过array.length增加或者减少数组的长度,如;array.length=4(数组长3,第四位为undefined),也可单纯获得长度.array[arr ...
- 最新数组方法(包括es6)
整理目前所用过的数组方法,学习了新增的es6方法. 1 arr.push() 从后面添加元素,返回值为添加完后的数组的长度 let arr = [1,2,3,4,5] console.log(arr. ...
- JavaScript数组方法--flat、forEach、map
今天到flat了,一个第一次知道该方法还是看到一个面试题,别人给了个答案,用到了flat才知道的方法. 前面也写过关于这道面试题的文章,<一道关于数组的前端面试题>. 这里再来说说吧! f ...
随机推荐
- 举例讲解Linux中tcpdump工具的应用
先来看一个比较基本的用法: tcpdump -i eth0 其中,eth0为参数值,表示需要抓包的网口,这是个必需参数哦. tcpdump的具体参数及意义: -i:指定tcpdump监听的网络接口 - ...
- 汇编指令与Intrinsics指令的对应关系汇总
汇编指令与Intrinsics指令的对应关系汇总 参考网址:https://software.intel.com/sites/landingpage/IntrinsicsGuide/ 1.赋值指令:m ...
- [SHOI2013]发微博
Description 刚开通的SH微博共有n个用户(1..n标号),在短短一个月的时间内,用户们活动频繁,共有m条按时间顺序的记录: ! x 表示用户x发了一条微博: + x y 表示用户x ...
- 【Spark SQL 源码分析系列文章】
从决定写Spark SQL源码分析的文章,到现在一个月的时间里,陆陆续续差不多快完成了,这里也做一个整合和索引,方便大家阅读,这里给出阅读顺序 :) 第一篇 Spark SQL源码分析之核心流程 第二 ...
- ThinkPHP关于模板的一些嵌套、IF判断使用
> ##### 前言,现在有一组数据(涉及到3个数据表,order订单表,order_process办理流程表,process_status流程描述表),根据当前订单,展示相应信息 1.办理流程 ...
- Google protobuf序列化以及反序列化
序列化的目的是将对象持久化到硬盘或者用于网络传输.java也提供了序列化技术,非常简单,只要实现Serializable接口即可.如下: public class commonService impl ...
- Linux 通过进程Pid与端口互查
ps -aux 状态详解 https://blog.csdn.net/whatday/article/details/54409387. linux下通过进程名查看其占用端口: https://www ...
- LeetCode第[29]题(Java):Divide Two Integers
题目:两整数相除 难度:Medium 题目内容: Given two integers dividend and divisor, divide two integers without using ...
- Sql Server 中关于@@ERROR的一个小小误区
我们经常写存储过程的时候会用到@@ERROR来判断执行是否成功,很久没有写复杂点的存储过程了,今天发现前段时间写的一个proc出现了bug,由于定义参数时,字符串长度设的有点短,导致传进来的值中间被截 ...
- 5.8 页面对象(Page Object)模式
页面对象(Page Object)模式是目前自动化测试领域普遍使用的设计模式之一,此模式可以大大提高测试代码的复用率,提高测试脚本的编写效率和维护效率,是中级自动化测试工程师的必备技能之一. 1.页面 ...