您当前的位置:首页 > 电脑百科 > 程序开发 > 算法

一文搞懂 NumPy 统计函数

时间:2022-07-07 10:21:45  来源:  作者:VT漫步

数学统计在我们的程序当中特别是数据分析当中是必不可少的一部分,本文就来介绍一下 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 的统计函数,包括最大最小值函数、总数与均值函数、中位数函数以及方差与标准差函数。这些函数主要运用在一些数据分析的统计工作中,我们可以不用实现这些统计方法的原理而直接使用函数,使我们的代码简洁而高效。



Tags:统计函数   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
一文搞懂 NumPy 统计函数
数学统计在我们的程序当中特别是数据分析当中是必不可少的一部分,本文就来介绍一下 NumPy 常见的统计函数。最大值与最小值numpy.amin()用于计算数组中的元素沿指定轴的最小...【详细内容】
2022-07-07  Search: 统计函数  点击:(433)  评论:(0)  加入收藏
办公必备的多条件统计函数公式,直接套用,请收好备用
统计分析,是Excel的拿手好戏,但对于大多数的亲来说,是道难题,Why?究其原因就是多条件函数公式不掌握,不熟练,不会应用……所以,小编今天分享的办公必备的多条件统计函...【详细内容】
2022-04-18  Search: 统计函数  点击:(364)  评论:(0)  加入收藏
▌简易百科推荐
小红书、视频号、抖音流量算法解析,干货满满,值得一看!
咱们中国现在可不是一般的牛!网上的网友已经破了十个亿啦!到了这个互联网的新时代,谁有更多的人流量,谁就能赢得更多的掌声哦~抖音、小红书、、视频号,是很多品牌必争的流量洼地...【详细内容】
2024-02-23  二手车小胖说    Tags:流量算法   点击:(18)  评论:(0)  加入收藏
雪花算法详解与Java实现:分布式唯一ID生成原理
SnowFlake 算法,是 Twitter 开源的分布式 ID 生成算法。其核心思想就是:使用一个 64 bit 的 long 型的数字作为全局唯一 ID。在分布式系统中的应用十分广泛,且 ID 引入了时间戳...【详细内容】
2024-02-03   一安未来  微信公众号  Tags:雪花算法   点击:(54)  评论:(0)  加入收藏
程序开发中常用的十种算法,你用过几种?
当编写程序时,了解和使用不同的算法对解决问题至关重要。以下是C#中常用的10种算法,每个算法都伴随着示例代码和详细说明。1. 冒泡排序 (Bubble Sort):冒泡排序是一种简单的比...【详细内容】
2024-01-17  架构师老卢  今日头条  Tags:算法   点击:(46)  评论:(0)  加入收藏
百度推荐排序技术的思考与实践
本文将分享百度在推荐排序方面的思考与实践。在整个工业界的推广搜场景上,特征设计通常都是采用离散化的设计,需要保证两方面的效果,一方面是记忆,另一方面是泛化。特征都是通过...【详细内容】
2024-01-09  DataFunTalk  微信公众号  Tags:百度推荐   点击:(81)  评论:(0)  加入收藏
什么是布隆过滤器?如何实现布隆过滤器?
以下我们介绍了什么是布隆过滤器?它的使用场景和执行流程,以及在 Redis 中它的使用,那么问题来了,在日常开发中,也就是在 Java 开发中,我们又将如何操作布隆过滤器呢?布隆过滤器(Blo...【详细内容】
2024-01-05  Java中文社群  微信公众号  Tags:布隆过滤器   点击:(94)  评论:(0)  加入收藏
面向推荐系统的深度强化学习算法研究与应用
随着互联网的快速发展,推荐系统在各个领域中扮演着重要的角色。传统的推荐算法在面对大规模、复杂的数据时存在一定的局限性。为了解决这一问题,深度强化学习算法应运而生。本...【详细内容】
2024-01-04  数码小风向    Tags:算法   点击:(106)  评论:(0)  加入收藏
非负矩阵分解算法:从非负数据中提取主题、特征等信息
非负矩阵分解算法(Non-negativeMatrixFactorization,简称NMF)是一种常用的数据分析和特征提取方法,主要用于从非负数据中提取主题、特征等有意义的信息。本文将介绍非负矩阵分解...【详细内容】
2024-01-02  毛晓峰    Tags:算法   点击:(75)  评论:(0)  加入收藏
再谈前端算法,你这回明白了吗?
楔子 -- 青蛙跳台阶一只青蛙一次可以跳上一级台阶,也可以跳上二级台阶,求该青蛙跳上一个n级的台阶总共需要多少种跳法。分析: 当n=1的时候,①只需要跳一次即可;只有一种跳法,即f(...【详细内容】
2023-12-28  前端爱好者  微信公众号  Tags:前端算法   点击:(114)  评论:(0)  加入收藏
三分钟学习二分查找
二分查找是一种在有序数组中查找元素的算法,通过不断将搜索区域分成两半来实现。你可能在日常生活中已经不知不觉地使用了大脑里的二分查找。最常见的例子是在字典中查找一个...【详细内容】
2023-12-22  小技术君  微信公众号  Tags:二分查找   点击:(81)  评论:(0)  加入收藏
强化学习算法在资源调度与优化中的应用
随着云计算和大数据技术的快速发展,资源调度与优化成为了现代计算系统中的重要问题。传统的资源调度算法往往基于静态规则或启发式方法,无法适应动态变化的环境和复杂的任务需...【详细内容】
2023-12-14  职场小达人欢晓    Tags:算法   点击:(169)  评论:(0)  加入收藏
站内最新
站内热门
站内头条