如何在Python中计算给定概率分布的第n个百分位数
对应问题解答
你需求里的distr是离散随机变量的概率质量函数(PMF),要计算的是累积分布(CDF)首次超过目标百分位的取值下标,用NumPy的基础函数就能快速实现,不需要额外依赖第三方库。
实现代码
import numpy as np def do_some_magic(distr, percentile): # 将输入的百分位转换为0-1区间的概率值 target = percentile / 100 # 计算概率分布对应的累积分布 cdf = np.cumsum(distr) # 返回第一个累积值大于等于目标概率的下标 return np.searchsorted(cdf, target)
测试验证
和你给出的示例输出完全一致:
distr = [.2, .6, .2] print(do_some_magic(distr, 50)) # 输出 1 distr = [.1, .1, .6, .2] print(do_some_magic(distr, 50)) # 输出 2
扩展说明
- 如果你是要计算已有样本数组的百分位数,可以直接调用NumPy的
np.percentile函数,传入样本数组和目标百分位即可,该函数支持自定义插值规则适配不同的分位数计算标准。 - 如果你使用的是scipy内置的标准概率分布(比如正态分布、泊松分布等),可以直接调用分布对象的
ppf方法(百分位点函数),传入0-1区间的目标概率即可直接得到对应分位数。
内容的提问来源于stack exchange,提问作者Aqua
相关产品推荐
相关产品推荐

