统计函数

可以通过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函数调用。

另外,numpymean,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之统计函数和布尔数组方法的更多相关文章

  1. NumPy 之 ndarray 多维数组初识

    why 回顾我的数据分析入门, 最开始时SPSS+EXCEL,正好15年初是上大一下的时候, 因为统计学的还蛮好的, SPSS傻瓜式操作,上手挺方便,可渐渐地发现,使用软件的最不好的地方是不够灵活, ...

  2. numpy 中不常用的一些方法

    作者:代码律动链接:https://zhuanlan.zhihu.com/p/36303821来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 挑战 1:引入 numpy ...

  3. Numpy的介绍与基本使用方法

    1.什么是Numpy numpy官方文档:https://docs.scipy.org/doc/numpy/reference/?v=20190307135750 NumPy是一个功能强大的Pytho ...

  4. NumPy之:ndarray多维数组操作

    NumPy之:ndarray多维数组操作 目录 简介 创建ndarray ndarray的属性 ndarray中元素的类型转换 ndarray的数学运算 index和切片 基本使用 index wit ...

  5. Javascript数组方法(译)

    在JavaScript中,数组可以使用Array构造函数来创建,或使用[]快速创建,这也是首选的方法.数组是继承自Object的原型,并且他对typeof没有特殊的返回值,他只返回'object'. ...

  6. ECMAScript 5中新增的数组方法

    ECMAScript 5中定义了9个新的数组方法,用于遍历.映射.过滤.检测.简化和搜索数组. 在开始介绍之前,很有必要对这几个新增的数组方法做一个概述.首先,大多数方法的第一个参数接收一个函数,并且 ...

  7. js 数组方法总结

    Array数组: length属性 可通过array.length增加或者减少数组的长度,如;array.length=4(数组长3,第四位为undefined),也可单纯获得长度.array[arr ...

  8. 最新数组方法(包括es6)

    整理目前所用过的数组方法,学习了新增的es6方法. 1 arr.push() 从后面添加元素,返回值为添加完后的数组的长度 let arr = [1,2,3,4,5] console.log(arr. ...

  9. JavaScript数组方法--flat、forEach、map

    今天到flat了,一个第一次知道该方法还是看到一个面试题,别人给了个答案,用到了flat才知道的方法. 前面也写过关于这道面试题的文章,<一道关于数组的前端面试题>. 这里再来说说吧! f ...

随机推荐

  1. Github fork其他项目的分支与主干保持同步

    Fork一个Repo Fork是一个复制的操作,当你Fork一个项目之后,你就有了在原项目的基础之上进行修改和扩展的权限. 通常情况下,Fork操作用于参与别人的项目(成为项目中的一员),或者以别人的 ...

  2. 并发-HashMap和HashTable源码分析

    HashMap和HashTable源码分析 参考: https://blog.csdn.net/luanlouis/article/details/41576373 http://www.cnblog ...

  3. Bootstrap——优秀的开源前端框架

    Bootstrap是著名的社交网站.微博的先驱Twitter在2011年8月推出的开源WEB前端框架,集合CSS和HTML,使用了最新的浏览器技术,为快速WEB开发提供了一套前端工具包,包括布局.网格 ...

  4. cmake手册

    cmake手册 部分转载自:http://www.cnblogs.com/coderfenghc/tag/cmake/ CMake2.8.3 主索引 命令名称 用法 描述 命令选项 生成器 命令 属性 ...

  5. mysql学习笔记(Centos下rpm编译配置+远程访问)

    新工作以来,博主感觉天天都很忙,博客已经好久没有写了 从昨天开始弄centos服务器中搭建mysql5.6,由于yum最新版本只有5.1的所以折腾到现在 首先看看是否已安装过其他版本的mysql [r ...

  6. 关于Action和EventHandler

    .net框架自带的两个常用类(Action和EventHandler),当然这两个类型的也可以自定义,但系统已经提供,直接拿来用即可,很方便 1:Action : 引用“void方法”的委托,目前框架 ...

  7. C++(十五) — sizeof 运算符

    1.基本数据类型 sizeof 是一个关键字,它是一个编译时运算符,用于判断变量或数据类型的字节大小. sizeof 运算符可用于获取类.结构.共用体和其他用户自定义数据类型的大小. 使用 sizeo ...

  8. python中*和**的打包和解包

    python中的*和**,能够让函数支持任意数量的参数,它们在函数定义和调用中,有着不同的目的 一. 打包参数 * 的作用:在函数定义中,收集所有的位置参数到一个新的元组,并将这个元组赋值给变量arg ...

  9. jenkins的Master/Slave模式

    一. Master/Slave模式 分担jenkins服务器的压力,任务分配到其它执行机来执行 Master:Jenkins服务器 Slave:执行机(奴隶机).执行Master分配的任务,并返回任务 ...

  10. vue.js相关资料

    1.https://cn.vuejs.org/v2/guide/ (中文文档)