专栏首页华章科技Numpy统计计算、数组比较,看这篇就够了

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

导读:工欲善其事,必先利其器。此前,我们在《

作者:魏溪含 涂铭 张修鹏

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里的数据是否满足一定的条件。

本文分享自微信公众号 - 大数据(hzdashuju),作者:魏溪含 涂铭 等

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-09-29

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 高能!8段代码演示Numpy数据运算的神操作

    Numpy是Numerical Python extensions 的缩写,字面意思是Python数值计算扩展。Numpy是Python中众多机器学习库的依赖,...

    华章科技
  • 谁在用 Python 弹奏一曲《菊花台》

    看到朋友圈有人在手机app上弹《菊花台》,简直太好听了。于是乎我也开始蠢蠢欲动,迅速下载app,对着谱子弹了起来。

    华章科技
  • 机器学习和深度学习视频资料精选(附学习资料)

    pandax视频教程 链接: https://pan.baidu.com/s/1pLqavVX 密码: fath python入门到精通 链接: http...

    华章科技
  • [机器学习实战札记] NumPy基础

    <<机器学习实战>>一书非常注重实践,对每个算法的实现和使用示例都提供了python实现。在阅读代码的过程中,发现对NumPy有一定的了解有助于理解代码。特别是...

    云水木石
  • 使用Rasterio读取栅格数据

    有没有觉得用GDAL的Python绑定书写的代码很不Pythonic,强迫症的你可能有些忍受不了。不过,没关系,MapBox旗下的开源库Rasterio帮我们解...

    卡尔曼和玻尔兹曼谁曼
  • Numpy np.array 相关常用操作学习笔记

    标准Python的列表(list)中,元素本质是对象。如:L = [1, 2, 3],需要3个指针和三个整数对象,对于数值运算比较浪费内存和CPU。因此,Num...

    用户5745385
  • PHP数据类型

    可以用十进制、二进制、八进制、十六进制表示,前面加上“+”和“-”表示正整数和负整数

    白胡杨同学
  • Python 打印语句

    首先申明下,本文为笔者学习《Python学习手册》的笔记,并加入笔者自己的理解和归纳总结。

    py3study
  • 将json数据格式化输出到控制台

    在做接口测试的过程中,大多数数据交互都使用json格式,但是在控制台输出json的效果远不如浏览器插件实现的漂亮。在找了一些资料后,决定自己写一个格式化输出js...

    FunTester
  • Python操作符

    py3study

扫码关注云+社区

领取腾讯云代金券