Python NumPy中np.percentile函数原理与用法详解
本文深入解析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用法的说明即为全部内容,希望能为大家提供参考,也欢迎继续支持本站。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









