Python 3.x np.百分位数不等于四分位数

Python 3.x np.百分位数不等于四分位数,python-3.x,numpy,quartile,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]) Q1 = np.median(X[:len(X)/2]) Q3 = np.median(X[len(X):]) Q1, Q3 # (2.0, 8.

我试图使用
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])
Q1 = np.median(X[:len(X)/2])
Q3 = np.median(X[len(X):])
Q1, Q3
# (2.0, 8.5)
但这是不正确的,因为第一和第三个四分位数应该分别为2和8.5

这可以如下所示:

quartiles = np.percentile(X, range(0, 100, 25))
quartiles
# array([1.  ,  2.5 ,  5.  ,  8.25])
Q1 = np.median(X[:len(X)/2])
Q3 = np.median(X[len(X):])
Q1, Q3
# (2.0, 8.5)

我无法理解
np.percentile
正在做什么来给出不同的答案。如果有任何关于这一点的说明,我将不胜感激。

没有对错之分,只是计算百分位数的不同方法。在连续的情况下,百分位数是一个定义良好的概念,而对于离散的样本,则更少:不同的方法不会对大量的观察产生影响(与重复的数量相比),但实际上对于小样本来说可能很重要,您需要逐个找出什么更有意义

要获得所需的输出,应在百分位函数中指定插值=‘中点’:

quartiles = np.percentile(X, range(0, 100, 25), interpolation = 'midpoint')
quartiles    # array([ 1. ,  2. ,  5. ,  8.5])
我建议你看一下这些文件