如何手动编写计算列表中Percentiles的自定义函数?
手动实现百分位数计算
核心数学逻辑
百分位数的计算核心是排序+位置插值,步骤如下:
- 把输入数据集按从小到大排序
- 计算目标百分位的位置索引:
i = (p / 100) * (n - 1),其中p是要计算的百分位数(比如50对应中位数),n是数据的总个数 - 根据索引
i的类型计算结果:- 若
i是整数,直接取排序后数组中索引为i的元素 - 若
i是小数,拆分出整数部分k和小数部分d,用线性插值得到结果:(1 - d) * 排序数组[k] + d * 排序数组[k+1] - 特殊情况:当
p=100时,直接返回排序数组的最后一个元素
- 若
Python实现代码
def calculate_percentile(data, p): if not data: raise ValueError("数据集不能为空") sorted_data = sorted(data) n = len(sorted_data) i = (p / 100) * (n - 1) k = int(i) d = i - k if k >= n - 1: return sorted_data[-1] return (1 - d) * sorted_data[k] + d * sorted_data[k + 1]
测试验证
用常见数据集测试,和NumPy默认逻辑对齐:
# 测试数据 test_data = [1, 3, 5, 7, 9] # 计算50百分位数(中位数) print(calculate_percentile(test_data, 50)) # 输出5.0 # 计算90百分位数 print(calculate_percentile(test_data, 90)) # 输出8.2
内容的提问来源于stack exchange,提问作者P6A08李倬霖
相关产品推荐
相关产品推荐

