导读:工欲善其事,必先利其器。此前,我们在《玩数据必备Python库:Numpy使用详解》一文中介绍了利用Numpy进行矩阵运算的方法,本文继续介绍Numpy的统计计算及其他科学运算的方法。

作者:魏溪含 涂铭 张修鹏

来源:大数据DT(ID:bigdatadt)

01 Numpy的统计计算方法

NumPy内置了很多计算方法,其中最重要的统计方法及说明具体如下。

  • sum():计算矩阵元素的和;矩阵的计算结果为一个一维数组,需要指定行或者列。

  • mean():计算矩阵元素的平均值;矩阵的计算结果为一个一维数组,需要指定行或者列。

  • max():计算矩阵元素的最大值;矩阵的计算结果为一个一维数组,需要指定行或者列。

  • mean():计算矩阵元素的平均值。

  • median():计算矩阵元素的中位数。

需要注意的是,用于这些统计方法的数值类型必须是int或者float。

数组示例代码如下:

vector = numpy.array([5, 10, 15, 20])
vector.sum()

得到的结果是50

矩阵示例代码如下:

matrix=
array([[ 5, 10, 15],[20, 10, 30],[35, 40, 45]])
matrix.sum(axis=1)
array([ 30,  60, 120])
matrix.sum(axis=0)
array([60, 60, 90])

如上述例子所示,axis = 1计算的是行的和,结果以列的形式展示。axis = 0计算的是列的和,结果以行的形式展示。

延伸学习:

官方推荐教程是不错的入门选择。

https://docs.scipy.org/doc/numpy-dev/user/quickstart.html

02 Numpy中的arg运算

argmax函数就是用来求一个array中最大值的下标。简单来说,就是最大的数所对应的索引(位置)是多少。示例代码如下:

index2 = np.argmax([1,2,6,3,2])        #返回的是2

argmin函数可用于求一个array中最小值的下标,用法与argmax类似。示例代码如下:

index2 = np.argmin([1,2,6,3,2]) #返回的是0

下面我们来探索下Numpy矩阵的排序和如何使用索引,示例代码如下:

import numpy as np
x = np.arange(15)
print(x)    # array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14])
np.random.shuffle(x)    #随机打乱
print(x)    # array([ 8, 13, 12,  3,  9,  2, 10,  0, 11,  5, 14,  7,  1,  4,  6])
sx = np.argsort(x)    #从小到大排序,返回索引值
print(sx)    # [ 7 12  5  3 13  9 14 11  0  4  6  8  2  1 10]

这里简单解释一下,第一个元素7代表的是x向量中的0的索引地址,第二个元素12代表的是x向量中的1的索引地址,其他元素以此类推。

03 FancyIndexing

要索引向量中的一个值是比较容易的,比如通过x[0]来取值。但是,如果想要更复杂地取数,比如,需要返回第3个、第5个以及第8个元素时,应该怎么办?示例代码如下:

import numpy as np
x = np.arange(15)
ind = [3,5,8]
print(x[ind]) #使用fancyindexing就可以解决这个问题

我们也可以从一维向量中构成新的二维矩阵,示例代码如下:

import numpy as np
x = np.arange(15)
np.random.shuffle(x)
ind = np.array([[0,2],[1,3]])  #第一行需要取x向量中索引为0的元素,以及索引为2的元素,第二行需要取x向量中索引为1的元素以及索引为3的元素
print(x)
print(x[ind])

我们来看下输出结果很容易就能明白了:

[ 3  2  7 12  9 13 11 14 10  5  4  1  6  8  0]
[[ 3  7][ 2 12]]

对于二维矩阵,我们使用fancyindexing取数也是比较容易的,示例代码如下:

import numpy as np
x = np.arange(16)
X = x.reshape(4,-1)
row = np.array([0,1,2])
col = np.array([1,2,3])
print(X[row,col])        #相当于取三个点,分别是(0,1),(1,2),(2,3)
print(X[1:3,col])        #相当于取第2、3行,以及需要的列

04 Numpy数组比较

Numpy有一个强大的功能是数组或矩阵的比较,数据比较之后会产生boolean值。示例代码如下:

import numpy as np
matrix = np.array([[5, 10, 15],
[20, 25, 30],
[35, 40, 45]
])
m = (matrix == 25)
print(m)

我们看到输出的结果如下:

[[False False False][False  True False][False False False]]

下面再来看一个比较复杂的例子,示例代码如下:

import numpy as np
matrix = np.array([
[5, 10, 15],
[20, 25, 30],
[35, 40, 45]])
second_column_25 =  (matrix[:,1] == 25)
print(second_column_25)
print(matrix[second_column_25, :])

上述代码中,print(second_column_25)输出的是[False, True False],首先matrix[:,1]代表的是所有的行,以及索引为1的列,即[10,25,40],最后与25进行比较,得到的就是[False, True, False]。print(matrix[second_column_25, :])代表的是返回true值的那一行数据,即 [20, 25, 30]。

注意:上述的示例是单个条件,Numpy也允许我们使用条件符来拼接多个条件,其中“&”代表的是“且”,“|”代表的是“或”。比如,vector=np.array([5,10,11,12]), equal_to_five_and_ten = (vector == 5) & (vector == 10)返回的都是false,如果是equal_to_five_or_ten = (vector == 5) | (vector == 10),则返回的是[True,True,False,False]。

比较之后,我们就可以通过np.count_nonzero(x<=3)来计算小于等于3的元素个数了,1代表True,0代表False。也可以通过np.any(x == 0),只要x中有一个元素等于0就返回True。np.all(x>0)则需要所有的元素都大于0才返回True。这一点可以帮助我们判断x里的数据是否满足一定的条件。

关于作者:魏溪含 ,爱丁堡大学人工智能硕士,阿里巴巴达摩院算法专家,在计算机视觉、大数据领域有8年以上的算法架构和研发经验。

涂铭,阿里巴巴数据架构师,对大数据、自然语言处理、图像识别、Python、Java相关技术有深入的研究,积累了丰富的实践经验。

张修鹏,毕业于中南大学,阿里巴巴技术发展专家,长期从事云计算、大数据、人工智能与物联网技术的商业化应用,在阿里巴巴首次将图像识别技术引入工业,并推动图像识别产品化、平台化。

本文摘编自《深度学习与图像识别:原理与实践》,经出版方授权发布。

延伸阅读《深度学习与图像识别:原理与实践》

点击上图了解及购买

转载请联系微信:DoctorData

推荐语:阿里巴巴达摩院算法专家、阿里巴巴技术发展专家、阿里巴巴数据架构师联合撰写,从技术原理、算法和工程实践3个维度系统展开,既适合零基础读者快速入门,又适合有基础读者理解其核心技术;写作方式上避开了艰涩的数学公式及其推导,深入浅出。

「大数据」内容合伙人之「鉴书小分队」上线啦!

最近,你都在读什么书?有哪些心得体会想要跟大家分享?

数据叔最近搞了个大事——联合优质图书出版商机械工业出版社华章公司发起鉴书活动。

简单说就是:你可以免费读新书,你可以免费读新书的同时,顺手码一篇读书笔记就行。详情请在大数据公众号后台对话框回复合伙人查看。

有话要说?

Q: 你用Numpy进行哪些运算?

欢迎留言与大家分享

猜你想看?

更多精彩?

在公众号对话框输入以下关键词

查看更多优质内容!

PPT | 报告 | 读书 | 书单 | 干货 

大数据 | 揭秘 | Python | 可视化

AI | 人工智能 | 5G | 中台

机器学习 | 深度学习 | 神经网络

合伙人 1024 | 段子 | 数学

据统计,99%的大咖都完成了这个神操作

?

觉得不错,请把这篇文章分享给你的朋友

转载 / 投稿请联系:baiyu@hzbook.com

更多精彩,请在后台点击“历史文章”查看

点击阅读原文,了解更多

Numpy统计计算、数组比较,看这篇就够了相关推荐

  1. Java String,看这篇就够了

    String,是Java中最重要的类.这句肯定的推断不是Java之父詹姆斯·高斯林说的,而是沉默王二说的,因此你不必怀疑它的准确性. 关于字符串,有很多的面试题,但我总觉得理论知识绕来绕去没多大意思. ...

  2. 【超全汇总】学习数据结构与算法,计算机基础知识,看这篇就够了【ZT帅地】2020-3-7

    https://blog.csdn.net/m0_37907797/article/details/104029002 由于文章有点多,并且发的文章也不是一个系列一个系列发的,不过我的文章大部分都是围 ...

  3. React入门看这篇就够了

    2019独角兽企业重金招聘Python工程师标准>>> 摘要: 很多值得了解的细节. 原文:React入门看这篇就够了 作者:Random Fundebug经授权转载,版权归原作者所 ...

  4. 99. 中高级开发面试必问的Redis,看这篇就够了

    中高级开发面试必问的Redis,看这篇就够了! 一.概述 二.数据类型 STRING LIST SET HASH ZSET 三.数据结构 字典 跳跃表 四.使用场景 计数器 缓存 查找表 消息队列 会 ...

  5. [个人向]超快速了解微信小程序:看这篇就够了!(注册、语言、框架、配额等简要说明)

    [个人向]超快速了解微信小程序看这篇就够了+相关简要说明 本文精炼微信小程序开发文档相关内容,旨在对初次接触并准备开发小程序的童鞋(比如自己)提供一个快速了解攻略.其中包括注册相关.语言.框架模式.相 ...

  6. Java应用系统监控看这篇就够了

    Java应用系统监控看这篇就够了 文章目录 业务背景 系统监控发展历程 技术方案 日志监控技术方案 Grafana+阿里云SLS日志服务 分布式链路追踪技术方案 阿里云jaeger方案 开源框架sky ...

  7. C++两个函数可以相互递归吗_[算法系列] 搞懂递归, 看这篇就够了 !! 递归设计思路 + 经典例题层层递进

    [算法系列] 搞懂递归, 看这篇就够了 !! 递归设计思路 + 经典例题层层递进 从学习写代码伊始, 总有个坎不好迈过去, 那就是遇上一些有关递归的东西时, 看着简短的代码, 怎么稀里糊涂就出来了. ...

  8. [算法系列] 搞懂递归, 看这篇就够了 !! 递归设计思路 + 经典例题层层递进

    [算法系列] 搞懂递归, 看这篇就够了 !! 递归设计思路 + 经典例题层层递进 从学习写代码伊始, 总有个坎不好迈过去, 那就是遇上一些有关递归的东西时, 看着简短的代码, 怎么稀里糊涂就出来了. ...

  9. caffe-源码学习——只看一篇就够了

    caffe-源码学习--只看一篇就够了 网络模型 说caffe代码难懂,其实关键点在于caffe中有很多基础的数学运算代码,如果能够对掌握这些数学运算,剩下的就是推公式了. 激活函数 sigmoid ...

  10. uiautomation遍历windows所有窗口_万字长文!滑动窗口看这篇就够了!

    大家好,我是小浩.今天是小浩算法 "365刷题计划" 滑动窗口系列 - 整合篇.之前给大家讲解过一些滑动窗口的题目,但未作系统整理. 所以我就出了这个整合合集,整合工作中除了保留原 ...

最新文章

  1. 给你的博客添加个看电影的频道
  2. new操作符到底干了什么?
  3. 畅谈程序人生暨孙鑫老师与读者交流会
  4. 2021-04-10 【数据库导数】数字类型的列如果位数过长,变为科学计数法问题
  5. sparklines插件_21个实用的Javascript数据图表插件
  6. IdentityServer4系列 | 资源密码凭证模式
  7. 不要用偏执毁掉一个产业
  8. 你发这些什么目的_微信CRM系统究竟是什么?
  9. 创建定制的ASP.NET AJAX非可视化客户端组件
  10. python以二进制读取的文件显示b'b'_python - Python读取二进制文件并解码 - 堆栈内存溢出...
  11. Linux系统中使用netcat命令的奇技淫巧
  12. java算法-递归算法思想
  13. Myeclipse2017破解:成功解决me Trial expired 0 days ago mgeclipse It's now time to buy the best IDE for yo
  14. 数据库系统和文件系统的区别
  15. Scratch少儿编程与游戏:圣骑士之魔法森林
  16. script for kettle send mail contect
  17. 26两种主界面的设计
  18. 安卓证书免费在线制作工具
  19. 读《富爸爸,穷爸爸》后感(三)
  20. Linux 磁盘管理(RAID)--第五章

热门文章

  1. 前端笔记-label标签的for属性
  2. Qt文档阅读笔记-Rotations Example相关
  3. Java学习笔记-Spring IoC 通过XML把Bean给IoC容器
  4. Linux学习笔记-协同进程基础
  5. Qt工作笔记-QT_BEGIN_NAMESPACE与QT_END_NAMESPACE的理解
  6. Qt学习笔记-基于QGraphicsScene的打地鼠游戏
  7. http 直接显示目录下文件_Linux文件管理(下)
  8. 计算火车运行时间(pta)
  9. (王道408考研操作系统)第四章文件管理-第一节1:文件管理初识
  10. (王道408考研数据结构)第五章树-第一节:树的定义、基本用语和常考性质