2017-03-16 27 views
1

我试图计算四分位数使用numpy在python值的阵列。np.percentile不等于四分位数

X = [1, 1, 1, 3, 4, 5, 5, 7, 8, 9, 10, 1000] 

我会做到以下几点:

quartiles = np.percentile(X, range(0, 100, 25)) 
quartiles 
# array([1. , 2.5 , 5. , 8.25]) 

但是,这是不正确,因为第一和第三四分位数应分别为2和8.5。

这可以显示如下:

Q1 = np.median(X[:len(X)/2]) 
Q3 = np.median(X[len(X):]) 
Q1, Q3 
# (2.0, 8.5) 

我不能让我的头一轮是什么np.percentile是做给了不同的答案。任何灯光流露在此,我都会非常感激。

回答

2

没有对错之分,但计算百分位数的百分比是在连续的情况下一个明确的概念,只是方式不同,没有那么对于离散样本:不同的方法不会有所作为的一个非常大的若干意见(与重复次数相比),但实际上对于小样本可能很重要,因此您需要弄清楚哪些情况更符合实际情况。

为了得到你想要的输出,你应该在百分功能指定插值=“中点”:

quartiles = np.percentile(X, range(0, 100, 25), interpolation = 'midpoint') 
quartiles # array([ 1. , 2. , 5. , 8.5]) 

我建议你看看在文档http://docs.scipy.org/doc/numpy/reference/generated/numpy.percentile.html