【问题标题】:x values of percentiles of a function y函数 y 的百分位数 x 值
【发布时间】:2021-05-22 14:22:21
【问题描述】:
我有一个通用函数 y(x)(不一定是高斯函数)。我想计算这个函数的百分位数,最好使用np.percentile(),这样我就得到了百分位数的x值。例如,第 50 个百分位数(中位数)的 x 值。但是,np.percentile() 采用分布,而不是某个变量的函数。
我将如何计算此函数的百分位数和各种统计数据(例如平均值、标准差、中位数等)?
【问题讨论】:
标签:
python
arrays
numpy
statistics
【解决方案1】:
您可以创建一个表示函数的分布,然后评估分布上的统计度量。
import matplotlib.pyplot as plt
import numpy as np
# resolution of the function
x = np.arange(-1, 1, 0.001)
# define function (Gaussian)
sigma = 0.1
mu = 0.2
y = 1 / (sigma * (2 * np.pi)**0.5) * np.e**(-0.5 * ((x - mu) / sigma)**2)
# create mask to remove values near zero
mask = np.logical_not(np.isclose(y, 0, 1e-2, 1e-2))
x = x[mask]
y = y[mask]
# plot function
plt.scatter(x, y)
# evaluate stats
np.std(y)
np.percentile(y, 50)
np.mean(y)
这种方法的缺点是删除不相关值的阈值,在我的示例中,值大约为零,这对统计测量有很大影响。
我还查看了 SymPy 文档,但没有看到针对此问题的实现。