首页 > Python3教程 > Python扩展程序库 -- NumPy

NumPy 统计函数

NumPy 提供了很多统计函数,用于从数组中查找最小元素,最大元素,百分位标准差和方差等。

numpy.amin() 和 numpy.amax()

numpy.amin() 用于计算数组中的元素沿指定轴的最小值。

numpy.amax() 用于计算数组中的元素沿指定轴的最大值。

import numpy as np

a = np.array([[3, 7, 5], [9, 6, 1], [2, 6, 9]])

print(a)
# [[3 7 5]
# [9 6 1]
# [2 6 9]]

print(np.amin(a, 1)) # [3 1 2]

print(np.amin(a, 0)) #[2 6 1]

print(np.amax(a)) #9

print(np.amax(a, axis=0)) # [9 7 9]

numpy.ptp()

numpy.ptp() 函数计算数组中沿指定轴的元素最大值与最小值的差(最大值 - 最小值)。

import numpy as np

a = np.array([[3, 7, 5], [9, 6, 3], [2, 1, 9]])
print('我们的数组是:')
print(a)

print('调用 ptp() 函数:')
print(np.ptp(a))

print('沿轴 1 调用 ptp() 函数:')
print(np.ptp(a, axis=1))

print('沿轴 0 调用 ptp() 函数:')
print(np.ptp(a, axis=0))
# 我们的数组是:
# [[3 7 5]
# [9 6 3]
# [2 1 9]]
# 调用 ptp() 函数:
# 8
# 沿轴 1 调用 ptp() 函数:
# [4 6 8]
# 沿轴 0 调用 ptp() 函数:
# [7 6 6]

numpy.percentile()

百分位数是统计中使用的度量,表示小于这个值的观察值的百分比。

numpy.percentile(a, q, axis)

参数说明:

  • a: 输入数组
  • q: 要计算的百分位数,在 0 ~ 100 之间
  • axis: 沿着它计算百分位数的轴

百分位数:

第 p 个百分位数是这样一个值,它使得至少有 p% 的数据项小于或等于这个值,且至少有 (100-p)% 的数据项大于或等于这个值。

举例:高等院校的入学考试成绩经常以百分位数的形式报告。比如,假设某个考生在入学考试中的语文部分的原始分数为 54 分。相对于参加同一考试的其他学生来说,他的成绩如何并不容易知道。但是如果原始分数54分恰好对应的是第70百分位数,我们就能知道大约70%的学生的考分比他低,而约30%的学生考分比他高。这里的 p = 70。

import numpy as np

a = np.array([[30, 60, 70], [80, 20, 10], [50, 90, 60]])

print(a)
# [[30 60 70]
# [80 20 10]
# [50 90 60]]

# 50% 的分位数,就是 a 里排序之后的中位数
print(np.percentile(a, 50)) # 60.0

# axis 0,在纵列上求
print(np.percentile(a, 50, axis=0)) # [50. 60. 60.]

# axis 1,在横行上求
print(np.percentile(a, 50, axis=1)) # [60. 20. 60.]

# 保持维度不变
print(np.percentile(a, 50, axis=1, keepdims=True))
# [[60.]
# [20.]
# [60.]]

numpy.median()

numpy.median() 函数用于计算数组 a 中元素的中位数(中值)

中值定义为将数据样本的上半部分与下半部分分开的值。

import numpy as np

a = np.array([[30, 65, 70], [80, 95, 10], [50, 90, 60]])
print('我们的数组是:')
print(a)

print('调用 median() 函数:')
print(np.median(a))

print('沿轴 0 调用 median() 函数:')
print(np.median(a, axis=0))

print('沿轴 1 调用 median() 函数:')
print(np.median(a, axis=1))
# 我们的数组是:
# [[30 65 70]
# [80 95 10]
# [50 90 60]]
# 调用 median() 函数:
# 65.0
# 沿轴 0 调用 median() 函数:
# [50. 90. 60.]
# 沿轴 1 调用 median() 函数:
# [65. 80. 60.]

numpy.mean()

算术平均值是沿轴的元素的总和除以元素的数量。

numpy.mean()函数返回数组中元素的算术平均值。 如果提供了轴,则沿其计算。

import numpy as np

a = np.array([[9, 2, 6], [3, 2, 5], [9, 5, 6]])

print('我们的数组是:')
print(a)

print('调用 mean() 函数:')
print(np.mean(a))

print('沿轴 0 调用 mean() 函数:')
print(np.mean(a, axis=0))

print('沿轴 1 调用 mean() 函数:')
print(np.mean(a, axis=1))
# 我们的数组是:
# [[9 2 6]
# [3 2 5]
# [9 5 6]]
# 调用 mean() 函数:
# 5.222222222222222
# 沿轴 0 调用 mean() 函数:
# [7. 3. 5.66666667]
# 沿轴 1 调用 mean() 函数:
# [5.66666667 3.33333333 6.66666667]

numpy.average()

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

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

考虑数组[1,2,3,4]和相应的权重[4,3,2,1],通过将相应元素的乘积相加,并将和除以权重的和,来计算加权平均值。加权平均值 = (1*4+2*3+3*2+4*1)/(4+3+2+1)

import numpy as np

a = np.array([1, 2, 3, 4])
print('我们的数组是:')
print(a)

print('调用 average() 函数:')
print(np.average(a))

# 不指定权重时相当于 mean 函数
wts = np.array([4, 3, 2, 1])
print('再次调用 average() 函数:')
print(np.average(a, weights=wts))

# 如果 returned 参数设为 true,则返回权重的和
print('权重的和:')
print(np.average([1, 2, 3, 4], weights=[4, 3, 2, 1], returned=True))
# 我们的数组是:
# [1 2 3 4]
# 调用 average() 函数:
# 2.5
# 再次调用 average() 函数:
# 2.0
# 权重的和:
# (2.0, 10.0)

在多维数组中,可以指定用于计算的轴。

import numpy as np

a = np.arange(6).reshape(3, 2)
print('我们的数组是:')
print(a)

wt = np.array([3, 5])
print(np.average(a, axis=1, weights=wt))

print(np.average(a, axis=1, weights=wt, returned=True))
# 我们的数组是:
# [[0 1]
# [2 3]
# [4 5]]
# [0.625 2.625 4.625]
# (array([0.625, 2.625, 4.625]), array([8., 8., 8.]))

标准差

标准差是与均值的偏差的平方的平均值的平方根。 标准差是一组数据平均值分散程度的一种度量。

标准差是方差的算术平方根。标准差公式如下:std = sqrt(mean((x - x.mean())**2))

如果数组是[1,2,3,4],则其平均值为2.5。 因此,差的平方是[2.25,0.25,0.25,2.25],并且其平均值的平方根除以4,即sqrt(5/4)是1.1180339887498949。

import numpy as np

print(np.std([1, 2, 3, 4])) # 1.118033988749895

方差

方差是偏差的平方的平均值。统计中的方差(样本方差)是每个样本值与全体样本值的平均数之差的平方值的平均数,即 mean((x - x.mean())** 2)

import numpy as np

print(np.var([1, 2, 3, 4])) # 1.25
关闭
感谢您的支持,我会继续努力!
扫码打赏,建议金额1-10元


提醒:打赏金额将直接进入对方账号,无法退款,请您谨慎操作。