numpy的百分位函数究竟做了什么?

时间:2015-10-26 11:40:19

标签: python numpy

根据我的理解,numpy's percentile计算数据的第q个百分位数。

但它究竟是怎么做的?

说,给定x = np.array([1.3, 1.7, 2.4, 2.8, 3.5, 5.6, 6.6, 7.7, 8.8, 9.9])(里面有10个花车)。

如果我np.percentile(x, 100),则会返回9.9000000000000004

如果我np.percentile(x, 90),它应该返回8.8,对吧?但它会回复8.9100000000000001

为什么会有这样的差异?这些差异是否可以接受?

2 个答案:

答案 0 :(得分:3)

从版本1.9.0开始,Numpy的百分位函数有一个interpolation参数,如下所示in the docs

  

插值:{'线性','下','更高','中点','最近'}   当所需的分位数位于两个数据点i和j之间时,此可选参数指定要使用的插值方法:

     
      
  • 线性:i +(j - i)*分数,其中分数是由i和j包围的索引的小数部分。
  •   
  • lower:i。
  •   
  • 更高:j。
  •   
  • nearest:i或j以最近的为准。
  •   
  • 中点:(i + j)/ 2。
  •   

默认为线性。如果您想从示例中获取8.8,请运行:

np.percentile(x, 90, interopolation='lower')

答案 1 :(得分:2)

根据我的理解,90%-percentile不必是输入数组中的项目。

来自documentation

  

给定长度为N的向量V,V的第q个百分位数是V的排序副本中的第q个排名值。两个最近邻居的值和距离以及插值参数将确定如果标准化排名与q完全不匹配,则为百分位数。如果q = 50,则此函数与中位数相同,如果q = 0,则与最小值相同,如果q = 100,则与最大值相同。

浮动表示的问题(导致np.percentile(x, 100)9.9相比略有不同)是well known