pin_drop当前位置:知识文库 ❯ 图文
NumPy统计函数大全 - 均值方差分位数轴计算完整教程
一、统计函数概述
NumPy统计函数用于计算数组的各种统计指标,包括均值、中位数、方差、标准差、最大值、最小值、求和、累积和等。这些函数支持沿指定轴计算,可以灵活地对行、列或整个数组进行统计分析。统计函数是数据分析和科学计算的基础工具。
核心参数说明
二、常用统计函数一览
三、基本统计计算示例
以下示例演示如何计算一维数组的各种基本统计指标:
代码示例
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
六、统计函数分类对比
七、实际应用场景
-
数据分析:计算各特征的均值和标准差,进行数据标准化 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 之外的值。
本文涉及AI创作
内容由AI创作,请仔细甄别