讲师中心 微信公众号
AI工具推荐 视频效率加速

如何在Python NumPy中计算数组的百分位数和中位数等统计指标?

夜瑶酱_6722

夜瑶酱_6722

发布时间:2026-07-14 09:41:43

|

199人浏览过

|

来源于php中文网

原创

np.percentile(arr, 50) 是计算中位数最稳妥统一的方法,支持 axis、keepdims 等参数,需注意 q 必须为数字、默认插值为 'linear'、含 nan 时应改用 np.nanpercentile。

如何在python numpy中计算数组的百分位数和中位数等统计指标?

用 np.percentile 计算任意百分位数,别硬套公式

NumPy 不提供单独的「中位数函数」来替代 np.percentile,因为中位数本质就是第 50 百分位数。直接调 np.percentile(arr, 50) 最稳妥,比用 np.median 更统一——尤其当你需要同时算 25、50、75 百分位时,参数一致、行为一致。

常见错误是传入字符串或列表形式的 q 值(如 q=['25', '50']),np.percentile 要求 q 是数字或数字数组:np.percentile(arr, [25, 50, 75]) 才合法。另外,默认插值方式是 'linear',若数据含重复值或样本量小,结果可能和 Excel 或 SciPy 的 'midpoint' 不同,需显式指定 interpolation='midpoint' 对齐。

  • np.percentile(arr, 50) 和 np.median(arr) 数值等价,但前者支持 axis、keepdims 等参数,更灵活
  • 多维数组时,务必明确 axis:比如按列算(每列一个中位数)用 axis=0,按行算用 axis=1
  • 遇到 nan 会返回 nan,需先用 np.nanpercentile 或清理数据

中位数不是「排序后取中间」那么简单

对偶数长度数组,NumPy 默认线性插值(如 [1,3] 返回 2.0),而不是简单取索引 n//2 - 1 和 n//2 两数平均——这二者在整数数组上结果相同,但浮点精度或非均匀分布下可能有微小差异。

真正容易踩坑的是 axis 行为:如果数组是二维且你没指定 axis,np.median 会把整个数组展平再算一个标量;而多数场景你需要每列/每行各自的中位数,必须写 np.median(arr, axis=0) 或 np.median(arr, axis=1)。

立即学习“Python免费学习笔记(深入)”;

python-script-generator
python-script-generator

快速生成专业的 Python 脚本和应用代码。一键创建完整项目结构,支持CLI、API、爬虫、Bot、Django等多种项目类型,包含完整的项目结构、配置文件、依赖管理、测试、README和文档。

下载
  • 不设 axis → 返回单个标量(全数组汇总)
  • axis=0 → 沿行方向压缩,结果形状为 (n_cols,)
  • axis=1 → 沿列方向压缩,结果形状为 (n_rows,)
  • 想保留维度用 keepdims=True,避免广播出错

np.quantile 和 np.percentile 到底选哪个?

二者功能完全重叠:np.quantile(arr, q) 中 q 是 0–1 区间的小数(如 0.5 表示中位数),np.percentile(arr, q) 中 q 是 0–100 的百分数(如 50)。选哪个纯看上下文习惯——处理统计报告常用百分位(50th percentile),写机器学习 pipeline 里常混用分位数(0.75 quantile)。

注意:两者默认插值方式都是 'linear',但 SciPy 的 scipy.stats.mstats.mquantiles 默认用 'inverted_cdf',数值可能不同。如果你从 R 或 pandas 迁移代码,pandas 的 Series.quantile() 默认 interpolation='linear',和 NumPy 一致;但旧版 pandas 曾用 'nearest',需检查版本。

  • 已习惯百分制 → 用 np.percentile
  • 对接数学公式或概率论文献 → 用 np.quantile
  • 二者性能无差异,编译后底层调同一段 C 代码

多维数组 + 缺失值 = 必须用 np.nanpercentile

只要数组里有一个 np.nan,np.percentile 就返回 nan,连警告都不给。这不是 bug,是设计:它不做隐式过滤,避免掩盖数据质量问题。真实业务中,传感器断连、日志缺失很常见,得主动用 np.nanpercentile。

但注意:np.nanpercentile 会自动丢弃 nan 后计算,不修改原数组。如果你需要保留原始 shape(比如做 mask 对齐),就得先用 np.isnan() 构造布尔掩码,再用 np.ma.masked_array 或布尔索引手动过滤——后者更直观:arr_clean = arr[~np.isnan(arr)]。

  • np.nanpercentile(arr, 50, axis=0) 对每列分别忽略 nan 再算中位数
  • 不能链式调用:np.percentile(arr, 50).dropna() 是错的,NumPy 没 dropna 方法
  • 若全列为 nan,np.nanpercentile 仍返回 nan,需额外判断 np.all(np.isnan(arr), axis=0)

实际用的时候,最常被忽略的是 axis 和插值方式的组合影响——尤其是做跨列归一化或分组统计时,差一个 axis 参数,结果维度就全乱了。

热门AI工具

更多
豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

立刻MV
立刻MV Hot

立刻MV是一款AI文本写作工具,AI 音乐视频(MV)创作工具。

讯飞智作

讯飞智作是一款AI视频创作工具,AI文本配音工具,数字人课程、营销视频制作。

LibLibAI
LibLibAI Hot

一款AI视频创作工具,主要用于国内领先的AI创意平台,以海量模型、低门槛操作与“创作-分享-商业化”生态,让小白与专业创作者都能高效实现图文乃至视频创意表达,适合需要提升相关任务效率的用户。

PixTV
PixTV Hot

PixTV是一款面向AIGC内容创作的AI视频生成工具。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

AionClaw
AionClaw Hot

AionClaw是一款面向办公、创作和编程任务的AI桌面智能体。

讯飞绘文

讯飞绘文是一款由科大讯飞推出的一站式 AIGC 内容运营平台。

相关专题

更多
python打包成可执行文件
python打包成可执行文件

本专题为大家带来python打包成可执行文件相关的文章,大家可以免费的下载体验。

1691

2023.07.20

python能做什么
python能做什么

python能做的有:可用于开发基于控制台的应用程序、多媒体部分开发、用于开发基于Web的应用程序、使用python处理数据、系统编程等等。本专题为大家提供python相关的各种文章、以及下载和课程。

4244

2023.07.25

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

1669

2023.07.31

python教程
python教程

Python已成为一门网红语言,即使是在非编程开发者当中,也掀起了一股学习的热潮。本专题为大家带来python教程的相关文章,大家可以免费体验学习。

24657

2023.08.03

python环境变量的配置
python环境变量的配置

Python是一种流行的编程语言,被广泛用于软件开发、数据分析和科学计算等领域。在安装Python之后,我们需要配置环境变量,以便在任何位置都能够访问Python的可执行文件。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

3007

2023.08.04

python eval
python eval

eval函数是Python中一个非常强大的函数,它可以将字符串作为Python代码进行执行,实现动态编程的效果。然而,由于其潜在的安全风险和性能问题,需要谨慎使用。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

3047

2023.08.04

scratch和python区别
scratch和python区别

scratch和python的区别:1、scratch是一种专为初学者设计的图形化编程语言,python是一种文本编程语言;2、scratch使用的是基于积木的编程语法,python采用更加传统的文本编程语法等等。本专题为大家提供scratch和python相关的文章、下载、课程内容,供大家免费下载体验。

1163

2023.08.11

python合并两个列表
python合并两个列表

Python是一种强大的编程语言,具有许多方便的功能和工具。在Python中,有多种方法可以合并两个列表。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

596

2023.08.10

C++运算符基础入门
C++运算符基础入门

本专题详细讲解了C++运算符的类型、语法与使用方法,涵盖算术运算符、关系运算符、逻辑运算符、位运算符、赋值运算符、条件运算符及其他特殊运算符,并通过代码示例解析优先级与结合性。

0

2026.10.09

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn