np.percentile不等于四分位数

时间:2017-03-16 15:38:03

标签: python-3.x numpy quartile

我正在尝试使用numpy计算python中值数组的四分位数。

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])

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

这可以显示如下:

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

我无法理解np.percentile正在做的事情以给出不同的答案。任何关于此的灯光,我都会非常感激。

1 个答案:

答案 0 :(得分:2)

没有对或错,只是简单地计算百分位数的方法百分位数在连续情况下是一个明确定义的概念,对于离散样本则更少:不同的方法对于大量观察不会产生影响(与重复的数量相比),但实际上对于小样本很重要,你需要弄清楚哪些更有意义。

要获得所需的输出,您应指定interpolation =' midpoint'在百分位函数中:

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