【问题标题】:np.percentile not equal to quartilesnp.percentile 不等于四分位数
【发布时间】:2017-08-07 21:23:53
【问题描述】:

我正在尝试使用 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 正在做什么来给出不同的答案。对此有任何启示,我将不胜感激。

【问题讨论】:

    标签: python-3.x numpy quartile


    【解决方案1】:

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

    要获得您想要的输出,您应该在百分位函数中指定插值 = '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

    【讨论】:

    • 我很确定中点解决方案仅在数组长度为奇数时才有效
    猜你喜欢
    • 2021-12-26
    • 2020-06-06
    • 1970-01-01
    • 2012-08-11
    • 2019-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-06
    相关资源
    最近更新 更多