我有一个下面的列表。
33、26、24、21、19、20、18、18、52、56、27、22、18、49、22、20、23、32、20、18
我要尝试的是找到第25个百分位数。
我用简单的numpy程序找到了它。
function dayRect(day) {
const days = ["I","II","III","IV","V","VI","VII"];
context.beginPath();
//maybe align the text inside this rect somehow
context.rect(0, day*h/7, 3*w/27, h/7);
context.stroke();
context.font = "0.5rem Arial";
context.fillStyle = "#fff";
context.fillText(days[day], 0, (day+1)*h/7);
}
输出为:19.75
但是,如果我们手动计数或使用Excel,则第25个百分位数为19.25。
我期望输出为19.25,但numpy的实际输出为19.75。有人可以帮忙这里有什么问题吗?
答案 0 :(得分:1)
检查您的输入值,并查找excel使用的内容,因为这些是numpy中的选项
t = ['linear', 'lower', 'higher', 'nearest', 'midpoint']
arr = np.array([33, 26, 24, 21, 19, 20, 18, 18, 52, 56, 27, 22, 18, 49, 22, 20, 23, 32, 20, 18])
for cnt, i in enumerate(t):
v = np.percentile(arr, 25., interpolation=i)
print("type: {} value: {}".format(i, v))
type: linear value: 19.75
type: lower value: 19
type: higher value: 20
type: nearest value: 20
type: midpoint value: 19.5
答案 1 :(得分:1)
您会看到,在excel中有两个百分位数函数:PERCENTILE.EXC
和PERCENTILE.INC
,不同之处在于“ Percentile.Inc
函数,k的值在0范围内到1(含1),并且在Percentile.Exc
函数中,k的值在0到1(排除)范围内。“(source)
Numpy的percentile
函数计算第k个百分位数,其中k必须在0和100之间(包括含(docs)
让我们检查一下。
arr = [18, 18, 18, 18, 19, 20, 20, 20, 21, 22, 22, 23, 24, 26, 27, 32, 33, 49, 52, 56]
np.percentile(arr,25)
19.75
希望有帮助