【发布时间】:2025-06-24 00:40:01
【问题描述】:
对于一个连续变量 x 及其概率密度函数 p(x),我有一个 x 值 x 的 numpy 数组和一个对应 p(x) 值 p 的 numpy 数组。 p(x) 虽然没有标准化,即在 p(x) 对 x 的图中,图下方的面积不是 1。我想计算累积分布函数 cdf 的值的相应数组。这就是我目前的做法,使用梯形规则来近似积分:
p_norm = p/np.trapz(p,x)
cdf = np.array([np.trapz(p_norm[:n],x[:n]) for n in range(len(p_norm))])
结果并不完全准确; cdf 的最终值接近 1,但不完全是 1。
有没有更准确、更简单的方法来规范化p 并找到cdf?我认为某些模块中可能有特定的功能;也许是一个面向统计的模块,具有相关参数(方差、置信区间等)的函数?
【问题讨论】:
-
你可以用
p / np.sum(p)规范化p,然后CDF就是np.cumsum(p)。 -
@Reti43 我认为当 x 是离散变量时有效,但当它是连续变量时无效。
-
你有 p 的表达式,还是你有很多样本?
-
@Reti43 不,我没有 p(x) 的表达式,只有 x 值的数组和相应的 p(x) 值的数组。不过,数组中的值的数量通常很大。
-
????尝试使用我在answer 中提到的其他一些方法。另请查看
scipy.integrate.cumulative_trapezoid以评估cdf。
标签: python arrays probability probability-density