|||
refer to:https://blog.csdn.net/qq_35542289/article/details/106440606
np.percentile
用来计算一组数的百分位数,其中50%
分位数就是中位数。函数文档如下
其余的参数我们都忽略,重点来看interpolation
。从代码中我们可以知道np.percentile
默认使用的是linear
即线性插值的方式来计算百分位数。从文档对interpolation
的解释来看,不论哪种计算方式都会涉及到i、j
。注意:i、j
是值,不是下标。那么接下来就介绍i、j
如何计算:
首先对数组进行从小到大的排序例如a = [4, 2, 1, 3]
排序之后 a = [1, 2, 3, 4]
然后计算位置loc = 1 + (n - 1) * p
。其中n
是数组长度;p
为百分位数0 <= p <= 1
,例如p = 0.95
表示95%
分位数;loc
表示百分位数是数组中的第几个元素,例如loc = 3.0
表示百分位数是数组中第3
个元素其下标是2
。注意:在Python中如果 p 为浮点数则最终结果为浮点数。
若loc
小数部分不为零则i = a[loc整数部分 - 1]
;j = a[loc整数部分]
;若loc
为整数或小数部分为零则i = j = 百分位数 = a[loc整数部分 - 1]
。
代码示例
下面介绍线性插值法计算百分位数
若loc
为整数或小数部分为零,则a[loc整数部分 - 1]
即为百分位数。
若loc
小数部分非零,例如2.4
则表示百分位数是数组中第2.4
个元素,此时百分位数的计算公式如下:a[loc整数部分 - 1] + (a[loc整数部分] - a[loc整数部分 - 1]) * loc小数部分
即i + (j - i) * loc小数部分
。以2.4
为例:第2.4
个元素在第二和第三个元素之间即a[1]
和a[2]
之间,所以结果为a[1] + (a[2] - a[1]) * 0.4
.
例1
解析:
首先对a
进行排序得到[1, 3, 5, 7, 9]
然后计算位置loc = 1 + (5 - 1) * 0.3 = 2.2
表示30%
分位数为第数组中第2.2
个元素
因为2.2
小数部分非零,所以百分位数计算公式为:a[1] + (a[2] - a[1]) * 0.2 = 3 + (5 - 3) * 0.2 = 3.4
例2
解析:
首先对a
进行排序得到[1, 3, 5, 7, 9]
然后计算位置loc = 1 + (5 - 1) * 0.5 = 3.0
表示50%
分位数为第数组中第3
个元素
因为3.0
小数部分为零所以百分位数为a[3 - 1]
即a[2]
,结果是5
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2024-12-28 23:47
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社