为何numpy.quantile计算0.75分位数返回49.75而非预期的55?
为什么numpy.quantile计算0.75分位数的结果和手动计算不同?
你的手动计算用的是**(n+1)*q的分位数位置定义,但numpy的quantile函数默认使用线性插值**的计算方法(对应method='linear'),这是分位数的两种不同定义,所以结果存在差异。
numpy默认方法的计算过程
你的数据集排序后为[13, 21, 21, 40, 42, 48, 55, 72],共8个元素(n=8)。numpy默认的分位数位置公式为:
i = (n - 1) * q
代入q=0.75计算:
i = (8-1)*0.75 = 5.25
这个位置对应排序数组的第6个元素(索引5,值48)和第7个元素(索引6,值55)之间的线性插值:
48 + (55 - 48) * (5.25 - 5) = 48 + 7*0.25 = 49.75
这就是numpy返回的结果。
匹配你手动计算的方法
你采用的(n+1)*q=6.75后取第7个元素的逻辑,对应numpy的method='upper'或method='weibull'参数。运行以下代码就能得到和你手动计算一致的结果:
import numpy as np values = [13, 21, 21, 40, 42, 48, 55, 72] print(np.quantile(values, 0.75, method='upper')) # 输出 55.0
补充:分位数的多种定义
分位数没有统一的标准计算方式,不同工具、领域会采用不同规则。numpy的quantile函数提供了9种method选项,常见的包括:
linear:默认,线性插值upper:取大于等于分位数的最小元素weibull:基于(n+1)*q的位置计算lower:取小于等于分位数的最大元素
你可以根据实际需求选择对应的计算方法。
内容的提问来源于stack exchange,提问作者Saniaaa
相关产品推荐
相关产品推荐

