python - scipy.stats.norm 密度函数未积分为 1

标签 python scipy statistics

我尝试对 scipy.stats.norm 生成的标准正态分布概率密度函数使用蒙特卡罗积分,它收敛到 1/(2*sqrt(pi)) 而不是 1。

代码:

from scipy.stats import norm
from numpy import average, pi
import math
samples = norm.rvs(loc=0, scale=1, size=10000000)
average(norm.pdf(samples, loc=0, scale=1)) - (1/(2*math.sqrt(pi)))

这将返回 ~ 0。 有人可以解释一下为什么它不收敛于 1。我在这里做错了什么吗?

最佳答案

您正在评估大型正态分布样本的 PDF,然后取这些 PDF 值的平均值。实际上,您正在计算正态 PDF 相对于正态分布的期望值。这是计算该值的快速方法:

In [284]: from scipy.stats import norm

In [285]: norm.expect(norm.pdf)
Out[285]: 0.28209479177387786

In [286]: 1/(2*np.sqrt(np.pi))
Out[286]: 0.28209479177387814

关于python - scipy.stats.norm 密度函数未积分为 1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42956528/

相关文章:

python - 如何组织应用引擎应用程序

python - 哪些信息描述了两个相同大小的给定大文件之间的数量差异?

python - Pandas 方差和标准差结果与手动计算不同

python - 如何将许多列汇总为独特的组合

python - 在 'from modulename import variable' 的情况下,可变性是否会改变命名空间的行为?

python - 曲线拟合和数据预处理

python - Python中的逐步回归

python - 查找由不规则数据点定义的体积 - python

mysql - 存储点击和查看统计信息的最佳方式?

python - 如何使用opencv和dlib检测前额区域?