百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术分类 > 正文

一文搞懂 NumPy 统计函数

ztj100 2025-01-05 01:00 20 浏览 0 评论

数学统计在我们的程序当中特别是数据分析当中是必不可少的一部分,本文就来介绍一下 NumPy 常见的统计函数。

最大值与最小值

numpy.amin()

用于计算数组中的元素沿指定轴的最小值。

可以通过 axis 参数传入坐标轴来指定统计的轴,当指定 axis 时,axis 的范围为 ndarray 的维度范围,可以利用 shape 函数获取 ndrray 的维度。我们来看例子:

import numpy as np

a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print("初始数组:")
print(a)
print('\n')

print(np.char.center('最小值', 15, '*'))
print("所有维度的最小值:")
print(np.amin(a))
print('\n')
print("0轴的最小值:")
print(np.amin(a, 0))
print('\n')
print("1轴的最小值:")
print(np.amin(a, 1))
print('\n')

# 返回
初始数组:
[[1 2 3]
 [4 5 6]
 [7 8 9]]
******最小值******
所有维度的最小值:
1
0轴的最小值:
[1 2 3]
1轴的最小值:
[1 4 7]

我们例子中使用的是二维数组,所以 axis 只有取0和1两个值。其实我们还可以用 numpy.min() 来计算,效果是一样的,只不过 NumPy 的官方文档上没有写 numpy.min() 这个方法,看源码我们知道这个方法其实是 numpy.amin() 的别名。

numpy.amax()

用于计算数组中的元素沿指定轴的最大值。

可以通过 axis 参数传入坐标轴来指定统计的轴,当指定 axis 时,axis 的范围为 ndarray 的维度范围,可以利用 shape 函数获取 ndrray 的维度。我们来看例子:

import numpy as np

a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print("初始数组:")
print(a)
print('\n')

print(np.char.center('最大值', 15, '*'))
print("所有维度的最大值:")
print(np.amax(a))
print('\n')
print("0轴的最大值:")
print(np.amax(a, 0))
print('\n')
print("1轴的最大值:")
print(np.amax(a, 1))
print('\n')

# 返回
初始数组:
[[1 2 3]
 [4 5 6]
 [7 8 9]]
******最大值******
所有维度的最大值:
9
0轴的最大值:
[7 8 9]
1轴的最大值:
[3 6 9]

这个函数和 numpy.amin() 函数是相反的含义,也可以用 numpy.max() 来计算。

numpy.ptp()

计算数组中元素最大值与最小值的差(最大值 - 最小值)。

实例:

import numpy as np

a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print("初始数组:")
print(a)
print('\n')

print(np.char.center('最大值与最小值的差', 15, '*'))
print("所有维度的极差:")
print(np.ptp(a))
print('\n')
print("0轴的极差:")
print(np.ptp(a, 0))
print('\n')
print("1轴的极差:")
print(np.ptp(a, 1))
print('\n')

# 返回
***最大值与最小值的差***
所有维度的极差:
8
0轴的极差:
[6 6 6]
1轴的极差:
[2 2 2]

这个方法可以迅速的找出数组中任何维度的最大最小值之差,还是很方便的。

中位数

numpy.percentile()

百分位数是统计中使用的度量,表示小于这个值的观察值的百分比。
numpy.percentile(a, q, axis) 接收以下参数:
a: 输入数组
q: 要计算的百分位数,在 0 ~ 100 之间
axis: 沿着它计算百分位数的轴

这个百分位怎么理解呢?

例如第60个百分位是这样一个值,它使得至少有60%的数据项小于或等于这个值,且至少有40%的数据项大于或等于这个值。

我们来看看实例:

import numpy as np

a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print("初始数组:")
print(a)
print('\n')

print(np.char.center('百分位数', 15, '*'))
print("50%的分位数,即数组排序之后的中位数:")
print(np.percentile(a, 50))
print('\n')
print("0轴的中位数:")
print(np.percentile(a, 50, 0))
print('\n')
print("1轴的中位数:")
print(np.percentile(a, 50, 1))
print('\n')

# 返回
******百分位数*****
50%的分位数,即数组排序之后的中位数:
5.0
0轴的中位数:
[4. 5. 6.]
1轴的中位数:
[2. 5. 8.]

numpy.median()

用于计算数组 a 中元素的中位数(中值)

我们来看实例:

import numpy as np

a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print("初始数组:")
print(a)
print('\n')

print(np.char.center('计算中位数', 15, '*'))
print("所有元素的中位数:")
print(np.median(a))
print('\n')
print("0轴的中位数:")
print(np.median(a, 0))
print('\n')
print("1轴的中位数:")
print(np.median(a, 1))
print('\n')

# 返回
*****计算中位数*****
所有元素的中位数:
5.0
0轴的中位数:
[4. 5. 6.]
1轴的中位数:
[2. 5. 8.]

总数与均值

numpy.sum()

用于按指定轴计算数组中的元素的和。

实例:

import numpy as np

a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print("初始数组:")
print(a)
print('\n')

print(np.char.center('求和', 15, '*'))
print("所有维度的和:")
print(np.sum(a))
print('\n')
print("按0轴求和:")
print(np.sum(a, 0))
print('\n')
print("按1轴求和:")
print(np.sum(a, 1))
print('\n')

# 返回
*******求和******
所有维度的和:
45
按0轴求和:
[12 15 18]
按1轴求和:
[ 6 15 24]

不管按哪个维度求和,得出的结果再相加肯定等于所有维度求和的结果。

numpy.mean()

按轴计算数组中元素的算术平均值。

算术平均值是沿轴的元素的总和除以元素的数量。我们来看实例:

import numpy as np

a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print("初始数组:")
print(a)
print('\n')

print(np.char.center('计算算术平均值', 15, '*'))
print("所有元素的算术平均值:")
print(np.mean(a))
print('\n')
print("0轴的算术平均值:")
print(np.mean(a, 0))
print('\n')
print("1轴的算术平均值:")
print(np.mean(a, 1))
print('\n')

# 返回
****计算算术平均值****
所有元素的算术平均值:
5.0
0轴的算术平均值:
[4. 5. 6.]
1轴的算术平均值:
[2. 5. 8.]

numpy.average()

根据在另一个数组中给出的各自的权重计算数组中元素的加权平均值,该函数可以接收一个轴参数,如果没有指定轴,则数组会被展开。

加权平均值是由每个分量乘以权重因子得到的平均值。即将各数值乘以相应的权数,然后加总求和得到总体值,再除以总的单位数。

举个例子:数组[1, 2, 3, 4]对应的权重是[4, 3, 2, 1],那么加权平均值的计算公式为:

加权平均值=(14+23+32+41)/(4+3+2+1)

实例:

import numpy as np

print(np.char.center('加权平均值', 15, '*'))
b = np.array([1, 2, 3, 4])
print("所有元素的加权平均值(不指定权重相当于求平均值):")
print(np.average(b))
print('\n')
print("指定权重的加权平均值:")
print(np.average(b, weights=[4, 3, 2, 1]))
print('\n')
print("指定权重的加权平均值以及权重的和:")
print(np.average(b, weights=[4, 3, 2, 1], returned=True))
print('\n')

# 返回
*****加权平均值*****
所有元素的加权平均值(不指定权重相当于求平均值):
2.5
指定权重的加权平均值:
2.0
指定权重的加权平均值以及权重的和:
(2.0, 10.0)

我们可以通过returned参数来设置是否返回权重的和。在上例中,权重数组中元素相加等于10。

方差与标准差

numpy.var()

计算数组中元素的方差

统计中的方差(样本方差)是每个样本值与全体样本值的平均数之差的平方值的平均数。计算公式为:

mean((x - x.mean())** 2)。

我们来看实例:

import numpy as np

print(np.char.center('计算方差', 15, '*'))
print(np.var([1, 2, 3, 4]))
print('\n')

# 返回
******计算方差*****
1.25

numpy.std()

计算数组中袁术的标准差

标准差是一组数据平均值分散程度的一种度量,是方差的算术平方根。标准差公式如下:

std = sqrt(mean((x - x.mean())**2))

我们来看实例:

import numpy as np

print(np.char.center('计算标准差', 15, '*'))
print(np.std([1, 2, 3, 4]))
print('\n')

# 返回
*****计算标准差*****
1.118033988749895

总结

本文向大家介绍了 NumPy 的统计函数,包括最大最小值函数、总数与均值函数、中位数函数以及方差与标准差函数。这些函数主要运用在一些数据分析的统计工作中,我们可以不用实现这些统计方法的原理而直接使用函数,使我们的代码简洁而高效。

相关推荐

这个 JavaScript Api 已被废弃!请慎用!

在开发过程中,我们可能会不自觉地使用一些已经被标记为废弃的JavaScriptAPI。这些...

JavaScript中10个“过时”的API,你的代码里还在用吗?

JavaScript作为一门不断发展的语言,其API也在持续进化。新的、更安全、更高效的API不断涌现,而一些旧的API则因为各种原因(如安全问题、性能瓶颈、设计缺陷或有了更好的替代品)被标记为“废...

几大开源免费的 JavaScript 富文本编辑器测评

MarkDown编辑器用的时间长了,发现发现富文本编辑器用起来是真的舒服。...

比较好的网页里面的 html 编辑器 推荐

如果您正在寻找嵌入到网页中的HTML编辑器,以便用户可以直接在网页上编辑HTML内容,以下是几个备受推荐的:CKEditor:CKEditor是一个功能强大的、开源的富文本编辑器,可以嵌入到...

Luckysheet 实现excel多人在线协同编辑

前言前些天看到Luckysheet支持协同编辑Excel,正符合我们协同项目的一部分,故而想进一步完善协同文章,但是遇到了一下困难,特此做声明哈,若侵权,请联系我删除文章!若侵犯版权、个人隐私,请联系...

从 Element UI 源码的构建流程来看前端 UI 库设计

作者:前端森林转发链接:https://mp.weixin.qq.com/s/ziDMLDJcvx07aM6xoEyWHQ引言...

手把手教你如何用 Decorator 装饰你的 Typescript?「实践」

作者:Nealyang转发连接:https://mp.weixin.qq.com/s/PFgc8xD7gT40-9qXNTpk7A...

推荐五个优秀的富文本编辑器

富文本编辑器是一种可嵌入浏览器网页中,所见即所得的文本编辑器。对于许多从事前端开发的小伙伴来说并不算陌生,它的应用场景非常广泛,平时发个评论、写篇博客文章等都能见到它的身影。...

基于vue + element的后台管理系统解决方案

作者:林鑫转发链接:https://github.com/lin-xin前言该方案作为一套多功能的后台框架模板,适用于绝大部分的后台管理系统(WebManagementSystem)开发。基于v...

开源富文本编辑器Quill 2.0重磅发布

开源富文本编辑器Quill正式发布2.0版本。官方TypeScript声明...

Python之Web开发框架学习 Django-表单处理

在Django中创建表单实际上类似于创建模型。同样,我们只需要从Django类继承,则类属性将是表单字段。让我们在myapp文件夹中添加一个forms.py文件以包含我们的应用程序表单。我们将创建一个...

Django测试入门:打造坚实代码基础的钥匙

这一篇说一下django框架的自动化测试,...

Django ORM vs SQLAlchemy:到底谁更香?从入门到上头的选择指南

阅读文章前辛苦您点下“关注”,方便讨论和分享,为了回馈您的支持,我将每日更新优质内容。...

超详细的Django 框架介绍,它来了!

时光荏苒,一晃小编的Tornado框架系列也结束了。这个框架虽然没有之前的FastAPI高流量,但是,它也是小编的心血呀。总共16篇博文,从入门到进阶,包含了框架的方方面面。虽然小编有些方面介绍得不是...

20《Nginx 入门教程》使用 Nginx 部署 Python 项目

今天的目标是完成一个PythonWeb项目的线上部署,我们使用最新的Django项目搭建一个简易的Web工程,然后基于Nginx服务部署该PythonWeb项目。1.前期准备...

取消回复欢迎 发表评论: