Python NumPy中np.percentile函数原理与用法详解

小林子
小林子
发布时间:2026-10-14 | 4人浏览过
原创

本文深入解析Python NumPy库中np.percentile函数的使用方法及底层计算逻辑。通过具体代码示例说明如何获取多维数组的任意百分比分位数,重点解读axis与keepdims参数的作用。同时,结合实例剖析线性插值算法在分位数计算中的具体过程,帮助开发者准确理解并应用该函数。

np.percentile函数基本用法

在Python中,若需计算多维数组的任意百分比分位数,可利用NumPy库提供的np.percentile函数。该函数默认将数据按从小到大排序后进行计算,使用方式简洁高效。

一维数组分位数计算示例


a = range(1,101)
#求取a数列第90%分位的数值
np.percentile(a, 90)
Out[5]: 90.10000000000001

a = range(101,1,-1)
#百分位是从小到大排列
np.percentile(a, 90)
Out[7]: 91.10000000000001

更多详细用法可参考官方文档说明。

多维数组与axis参数详解


numpy.percentile
Parameters
 ----------
 a : np数组
 q : float in range of [0,100] (or sequence of floats)
  Percentile to compute。
  要计算的q分位数。
 axis : 那个轴上运算。
 keepdims :bool是否保持维度不变。

 Examples
 --------
 >>> a = np.array([[10, 7, 4], [3, 2, 1]])
 >>> a
 array([[10, 7, 4],
   [ 3, 2, 1]])
 >>> np.percentile(a, 50) #50%的分位数,就是a里排序之后的中位数
 3.5
 >>> np.percentile(a, 50, axis=0) #axis为0,在纵列上求
 array([[ 6.5, 4.5, 2.5]])
 >>> np.percentile(a, 50, axis=1) #axis为1,在横行上求
 array([ 7., 2.])
 >>> np.percentile(a, 50, axis=1, keepdims=True) #keepdims=True保持维度不变
 array([[ 7.],
   [ 2.]])

分位数计算原理深度解析

补充知识:关于np.percentile函数的个人理解(我认为非常准确)

最近在复现他人基线代码时遇到了np.percentile函数,此前未曾使用过,因此查阅了官方文档以探究其具体工作机制(官方文档链接见)。

官方文档中的示例恰好使用了50作为参数(这显然是求中位数),但在实际运行中,我对为何输出结果为5.8感到困惑。

线性插值计算逻辑

经过仔细推敲,我意识到该函数的核心意义在于:返回一个数值,使得列表中60%的数据小于或等于该数值。

示例中的列表长度为9。数字1对应0%位置,数字9对应100%位置,两者之间共有8个间隔。每个间隔代表的百分比为100/8=12.5。

当参数设为60时,计算60/12.5=4.8,这意味着需要跨越4.8个间隔。首先跳过4个完整的间隔,到达数字5所在的位置;随后再向后移动0.8个间隔。由于该间隔内数值从5增加到6(长度为1),最终结果为5 + 1 * 0.8 = 5.8,这与函数输出的结果完全一致。

这主要是出于对细节的钻研。如果不需要了解具体的计算过程,只需记住该函数的统计意义即可。

此外,在我的解释中特意使用了“间隔”这一概念,是因为示例中1到9相邻数字的差值相同。但在实际应用场景中,数据分布可能不均匀,间隔长度并不固定。

以上关于Python NumPy库np.percentile用法的说明即为全部内容,希望能为大家提供参考,也欢迎继续支持本站。

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表