一系列浮点数的百分位数

Percentile of a range of floating points

我正在编写一个函数,它接受一个浮点数列表并打印出浮点数的 'pth' 个百分位数:

from scipy import stats

def print_percentiles(a, p):
    for i in p:
        print('The ', i, 'th percentile is ', stats.scoreatpercentile(a, i), '.', sep='')

print_percentiles([1, 1, 3, 6, 2], [50])
# The 50th percentile is 2.0.

print_percentiles(range(1, 21), [75, 25])
# The 75th percentile is 15.25.
# The 25th percentile is 5.75.

第一次测试得到了正确的输出,但是当函数的第一个参数是数字范围 (1, 21) 时,输出不正确,应该是:

第 75 个百分位数是 15.0。

第 25 个百分位数是 5.0。

为什么函数在这种情况下产生错误的输出?

只需使用所需的 interpolation_method='lower',因为这不是 documentation.

中描述的默认值
from scipy import stats

def print_percentiles(a, p):
    for i in p:
        print('The ', i, 'th percentile is ', stats.scoreatpercentile(a, i, interpolation_method='lower'), '.', sep='')

print_percentiles([1, 1, 3, 6, 2], [50])
# The 50th percentile is 2.0.

print_percentiles(range(1, 21), [75, 25])

结果:

The 50th percentile is 2.0.
The 75th percentile is 15.0.
The 25th percentile is 5.0.