np.percentile()(超详细超简单!!!)

137 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第26天,点击查看活动详情

==百分位是一个多维数组中对应每个数的,小于它的数的占总数比。==

np.percentile(a, q, axis=None,keepdims:bool)

参数

  • a : array,用来算分位数的对象,可以是多维的数组
  • q : 介于0-100的float,用来计算是几分位的参数,如四分之一位就是25,如要算两个位置的数就[0,100],多个位置如[0,25,50,75,100]
  • axis : axis为0,在纵列上求;axis为1,在横列上求;
  • keepdims:bool,是否保持维度不变。

栗子

import numpy as np
a = np.array([[6, 10, 11], [3, 2, 12]])
print(a)
print(np.percentile(a,[0,25,50,75,100]))

输出结果

[[ 6 10 11]
 [ 3  2 12]]
[ 2.    3.75  8.   10.75 12.  ]

解释

排序为2,3,6,10,11,12,首先占比为0和占比100的当然就是最小值和最大值了;其次占比为25%的数小于3.75;再次占比为50%的数小于8,即小于中位数;最后占比为75%的数小于10.75;

为什么是3.75和10.75?下面介绍线性插值法计算百分位数

loc = 1 + (n - 1) * p ,其中n为排序后数的个数,p为百分位 num = a[loc整数部分 - 1] + (a[loc整数部分] - a[loc整数部分 - 1]) * loc小数部分

#如a = [2,3,6,10,11,12]
#对于25%
loc = 1+(6-1)*0.25 = 2.25
num = a[2 - 1] + (a[2] - a[2 - 1])*0.25
	= a[1] + (a[2] - a[1])*0.25
	= 3 + (6-3)*0.25
	= 3.75 

其他

参考官方文档

Examples
--------
>>> a = np.array([[10, 7, 4], [3, 2, 1]])
>>> a
array([[10,  7,  4],
       [ 3,  2,  1]])
>>> 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.]])

参考

www.cnblogs.com/nxf-rabbit7… blog.csdn.net/brucewong05… blog.csdn.net/Toxicant__/… blog.csdn.net/baidu_38432… www.pythonheidong.com/blog/articl…

我讲明白了吗? 在这里插入图片描述