6.3 统计运算
NumPy统计运算教程:从基础到加权统计全面指南
本教程详细讲解NumPy中的统计运算函数,覆盖基础统计量如sum、mean、median、std、var,极值与位置函数如min、max、argmin、argmax、ptp,累计运算函数如cumsum、cumprod、cummin、cummax,按轴统计axis参数详解,以及加权统计np.average(),适合新手快速上手NumPy数据处理。
NumPy统计运算教程
引言
NumPy是Python科学计算的核心库,提供了高效的数组操作和数学函数。统计运算是数据分析的基础,NumPy内置了丰富的统计函数,使得数据处理变得简单快捷。本教程将一步步教你如何使用这些函数,从基础概念到高级应用,适合初学者学习。
1. 基础统计量
基础统计量用于描述数据的集中趋势和离散程度。NumPy提供了多种函数来计算这些量。
1.1 sum: 求和
np.sum(array) 函数计算数组中所有元素的和。可以应用于任何维度的数组。
import numpy as np
arr = np.array([1, 2, 3, 4, 5])
print(np.sum(arr)) # 输出: 15
解释:这里创建了一个一维数组,np.sum(arr) 返回所有元素的和,即1+2+3+4+5=15。
1.2 mean: 平均值
np.mean(array) 计算数组元素的平均值,公式为总和除以元素个数。
arr = np.array([1, 2, 3, 4, 5])
print(np.mean(arr)) # 输出: 3.0
解释:平均值是15/5=3.0,表示数据的中心位置。
1.3 median: 中位数
np.median(array) 计算数组元素的中位数,即排序后中间的值。对于偶数个元素,取中间两个值的平均值。
arr = np.array([1, 2, 3, 4, 5])
print(np.median(arr)) # 输出: 3.0
解释:数组排序后是[1,2,3,4,5],中位数是中间的元素3。
1.4 std: 标准差
np.std(array) 计算数组元素的标准差,用于衡量数据的离散程度。公式基于方差的平方根。
arr = np.array([1, 2, 3, 4, 5])
print(np.std(arr)) # 输出: 约1.4142
解释:标准差表示数据点偏离平均值的程度。
1.5 var: 方差
np.var(array) 计算数组元素的方差,是标准差的平方,表示数据的变异大小。
arr = np.array([1, 2, 3, 4, 5])
print(np.var(arr)) # 输出: 2.0
解释:方差为(1-3)^2 + (2-3)^2 + ... = 10/5=2.0。
2. 极值与位置
极值与位置函数帮助找到数据的最小值、最大值及其在数组中的位置。
2.1 min 和 max: 最小值和最大值
np.min(array) 返回数组中的最小值,np.max(array) 返回最大值。
arr = np.array([1, 2, 3, 4, 5])
print(np.min(arr)) # 输出: 1
print(np.max(arr)) # 输出: 5
解释:min 和 max 直接给出数值,不加其他处理。
2.2 argmin 和 argmax: 最小值和最大值的位置
np.argmin(array) 返回最小值在数组中的索引位置,np.argmax(array) 返回最大值的索引位置。索引从0开始。
arr = np.array([1, 2, 3, 4, 5])
print(np.argmin(arr)) # 输出: 0(对应元素1)
print(np.argmax(arr)) # 输出: 4(对应元素5)
解释:在数据分析中,有时需要知道极值出现的位置,例如找最大值对应的事件。
2.3 ptp: 极差
np.ptp(array) 返回最大值减去最小值的结果,即数据的范围。
arr = np.array([1, 2, 3, 4, 5])
print(np.ptp(arr)) # 输出: 4(5-1)
解释:极差是简单衡量数据分散度的指标。
3. 累计运算
累计运算函数沿着数组的轴逐步计算累积值,常用于时间序列或逐步求和。
3.1 cumsum: 累计和
np.cumsum(array) 返回数组中每个位置的累计和,结果是一个与原数组同形状的新数组。
arr = np.array([1, 2, 3, 4, 5])
print(np.cumsum(arr)) # 输出: [ 1 3 6 10 15]
解释:第一个元素是1,第二个是1+2=3,以此类推。
3.2 cumprod: 累计积
np.cumprod(array) 返回累计积,即每个位置之前所有元素的乘积。
arr = np.array([1, 2, 3, 4, 5])
print(np.cumprod(arr)) # 输出: [ 1 2 6 24 120]
解释:常用于计算阶乘或累积因子。
3.3 cummin 和 cummax: 累计最小值和最大值
np.cummin(array) 返回累计最小值,np.cummax(array) 返回累计最大值。
arr = np.array([3, 1, 4, 2, 5])
print(np.cummin(arr)) # 输出: [3 1 1 1 1]
print(np.cummax(arr)) # 输出: [3 3 4 4 5]
解释:累计最小值从第一个元素开始,每个位置取之前所有元素的最小值;累计最大值类似。
4. 按轴统计
在NumPy中,许多函数支持 axis 参数,允许沿特定轴进行计算,这对于多维数组尤其有用。
4.1 axis 参数详解
axis 参数指定沿哪个轴计算,可以是整数(如0或1)或元组(用于多轴)。
- 对于一个2D数组
arr = np.array([[1, 2, 3], [4, 5, 6]]):axis=0表示沿第一个轴(行方向)操作,即跨行计算。axis=1表示沿第二个轴(列方向)操作,即跨列计算。
示例:
arr = np.array([[1, 2, 3], [4, 5, 6]])
print(np.sum(arr, axis=0)) # 沿轴0求和:输出 [5 7 9](每列的和)
print(np.sum(arr, axis=1)) # 沿轴1求和:输出 [6 15](每行的和)
解释:axis=0 意味着在行的维度上压缩,结果是列向量;axis=1 反之。
4.2 其他函数使用 axis
大多数统计函数都支持 axis 参数,如 mean、std 等。
# 计算每列的平均值
print(np.mean(arr, axis=0)) # 输出: [2.5 3.5 4.5]
# 计算每行的标准差
print(np.std(arr, axis=1)) # 输出: [0.8165 0.8165]
5. 加权统计
NumPy提供了 np.average() 函数来计算加权平均值,适用于需要考虑不同权重的情况。
5.1 np.average() 函数
np.average(array, weights=weights) 计算加权平均值,其中 weights 是与 array 形状相同的权重数组。
示例:假设数组 arr = np.array([1, 2, 3, 4, 5]) 和权重 weights = np.array([0.1, 0.2, 0.3, 0.2, 0.2])
arr = np.array([1, 2, 3, 4, 5])
weights = np.array([0.1, 0.2, 0.3, 0.2, 0.2])
print(np.average(arr, weights=weights)) # 输出: 约3.2
解释:加权平均值 = (10.1 + 20.2 + 30.3 + 40.2 + 5*0.2) / (0.1+0.2+0.3+0.2+0.2)。权重数组的总和应为1,但NumPy会自动处理。
注意:权重数组应与原始数组形状匹配,否则会抛出错误。
结语
通过本教程,你应该对NumPy中的统计运算有了全面的了解。从基础统计量到高级的加权统计,这些函数是数据分析的基础工具。多加练习,尝试在不同维度数组上应用这些函数,你将能更高效地处理数据。NumPy的强大在于其简洁和速度,掌握这些统计运算将为你的数据科学之旅奠定坚实基础。
如果有任何疑问,建议查阅NumPy官方文档获取更多详细信息。