pin_drop当前位置:知识文库 ❯ 图文

NumPy统计函数大全 - 均值方差分位数轴计算完整教程

一、统计函数概述

NumPy统计函数用于计算数组的各种统计指标,包括均值、中位数、方差、标准差、最大值、最小值、求和、累积和等。这些函数支持沿指定轴计算,可以灵活地对行、列或整个数组进行统计分析。统计函数是数据分析和科学计算的基础工具。

核心参数说明

参数 类型 默认值 说明
a array_like 必填 输入数组
axis int/tuple/None None 计算轴,None为全局计算
dtype dtype None 计算时使用的数据类型
keepdims bool False 是否保持原维度
where array_like True 仅计算满足条件的元素

二、常用统计函数一览

函数 说明
np.mean() 算术平均值
np.median() 中位数
np.std() 标准差
np.var() 方差
np.min() / np.max() 最小值/最大值
np.sum() 求和
np.prod() 求积
np.cumsum() 累积和
np.cumprod() 累积积
np.argmin() / np.argmax() 最小值/最大值索引
np.percentile() 百分位数
np.quantile() 分位数

三、基本统计计算示例

以下示例演示如何计算一维数组的各种基本统计指标:

代码示例


import numpy as np

arr = np.array([15, 23, 8, 42, 16, 31, 27, 5, 19, 34])

print(f"数组: {arr}")
print(f"均值: {np.mean(arr):.2f}")
print(f"中位数: {np.median(arr):.2f}")
print(f"标准差: {np.std(arr):.2f}")
print(f"方差: {np.var(arr):.2f}")
print(f"最小值: {np.min(arr)}")
print(f"最大值: {np.max(arr)}")
print(f"求和: {np.sum(arr)}")
print(f"最小值索引: {np.argmin(arr)}")
print(f"最大值索引: {np.argmax(arr)}")

输出结果:

代码示例


数组: [15 23  8 42 16 31 27  5 19 34]
均值: 22.00
中位数: 21.00
标准差: 11.14
方差: 124.00
最小值: 5
最大值: 42
求和: 220
最小值索引: 7
最大值索引: 3

四、沿指定轴统计示例

axis参数是NumPy统计函数最重要的参数之一:

  • axis=None:全局计算,将整个数组扁平化后计算,返回标量

  • axis=0:沿行方向计算,结果为每列的统计值

  • axis=1:沿列方向计算,结果为每行的统计值

代码示例


import numpy as np

arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(f"数组:\n{arr}")

# 全局统计
print(f"\n全局均值: {np.mean(arr)}")

# 沿行计算(每列的均值)
print(f"每列均值(axis=0): {np.mean(arr, axis=0)}")

# 沿列计算(每行的均值)
print(f"每行均值(axis=1): {np.mean(arr, axis=1)}")

# 保持维度
print(f"每列均值(keepdims): {np.mean(arr, axis=0, keepdims=True)}")
print(f"每行均值(keepdims):\n{np.mean(arr, axis=1, keepdims=True)}")

输出结果:

代码示例


数组:
[[1 2 3]
 [4 5 6]
 [7 8 9]]

全局均值: 5.0
每列均值(axis=0): [4. 5. 6.]
每行均值(axis=1): [2. 5. 8.]
每列均值(keepdims): [[4. 5. 6.]]
每行均值(keepdims):
[[2.]
 [5.]
 [8.]]

提示keepdims=True 保持结果维度不变,便于后续广播运算。例如全局均值结果为 [[5.]] 而非 5.0

五、累积运算与百分位数示例

代码示例


import numpy as np

arr = np.array([3, 1, 4, 1, 5, 9, 2, 6])

# 累积和
print(f"累积和: {np.cumsum(arr)}")

# 累积积
print(f"累积积: {np.cumprod(arr)}")

# 百分位数
data = np.array([10, 20, 30, 40, 50, 60, 70, 80, 90, 100])
print(f"\n25%分位数: {np.percentile(data, 25)}")
print(f"50%分位数(中位数): {np.percentile(data, 50)}")
print(f"75%分位数: {np.percentile(data, 75)}")

# 分位数
print(f"0.25分位数: {np.quantile(data, 0.25)}")
print(f"0.75分位数: {np.quantile(data, 0.75)}")

# 条件统计
arr2 = np.array([1, -2, 3, -4, 5, -6])
print(f"\n正数求和: {np.sum(arr2, where=arr2>0)}")
print(f"正数均值: {np.mean(arr2, where=arr2>0):.2f}")

输出结果:

代码示例


累积和: [ 3  4  8  9 14 23 25 31]
累积积: [    3     3    12    12    60   540  1080  6480]

25%分位数: 32.5
50%分位数(中位数): 55.0
75%分位数: 77.5

0.25分位数: 32.5
0.75分位数: 77.5

正数求和: 9
正数均值: 3.00

六、统计函数分类对比

类别 函数 说明
集中趋势 mean, median 描述数据中心位置
离散程度 std, var, ptp 描述数据分散程度
极值 min, max, argmin, argmax 找最值及其位置
累积 cumsum, cumprod 累积运算
分位 percentile, quantile 描述数据分布位置

七、实际应用场景

  • 数据分析:计算各特征的均值和标准差,进行数据标准化 z = (x - mean) / std

  • 金融分析:计算收益率的均值、方差和分位数,评估投资风险和回报

  • 机器学习:使用argmax获取预测概率最大的类别,实现分类预测

八、注意事项

注意np.std()np.var() 默认计算总体标准差/方差(ddof=0),样本标准差需设置 ddof=1

注意:axis参数的理解:axis=0 沿行方向计算(结果为每列统计),axis=1 沿列方向计算(结果为每行统计)。

注意:空数组或全NaN数组的统计结果为nan,可使用 np.nanmean()np.nanstd() 等函数忽略NaN。


常见问题

总体标准差和样本标准差有什么区别?

总体标准差除以n(ddof=0),样本标准差除以n-1(ddof=1)。样本标准差用n-1是为了无偏估计,因为样本通常小于总体,除以n-1可以补偿偏差。当数据代表整个总体时用ddof=0,当数据是样本的子集时用ddof=1。

axis=0和axis=1到底是什么意思?

axis指定"沿着哪个方向压缩"。axis=0表示沿行方向压缩(行被合并),结果是每列的统计;axis=1表示沿列方向压缩(列被合并),结果是每行的统计。可以理解为axis的值是"被消掉的维度"。

如何处理数组中的NaN值?

NumPy提供了nan系列函数:np.nanmean()、np.nanstd()、np.nanmax()、np.nanmin()等,它们会自动忽略NaN值。也可以用np.isnan()找到NaN位置后用np.where或布尔索引替换。

percentile和quantile有什么区别?

两者计算方式相同,只是参数表示方式不同。percentile使用0-100的数值(如25表示25%),quantile使用0-1的小数(如0.25表示25%)。np.percentile(data, 25) 等价于 np.quantile(data, 0.25)。

如何检测异常值?

常用方法是均值±2倍标准差:异常值 = |x - mean| > 2*std。用NumPy可写为 outliers = arr[np.abs(arr - arr.mean()) > 2 * arr.std()]。也可以用四分位距IQR方法:Q1 - 1.5*IQR 到 Q3 + 1.5*IQR 之外的值。


标签: NumPy 统计函数 数据分析 均值方差 Python教程 分位数

本文涉及AI创作

内容由AI创作,请仔细甄别

list快速访问

上一篇: NumPy数学函数大全 - 三角函数指数对数取整运算教程 下一篇: NumPy线性代数完整教程 - 矩阵运算与SVD分解

poll相关推荐