scipy.stats.norm密度函数未集成到1

时间:2017-03-22 15:45:48

标签: 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.我在这里做错了吗?

1 个答案:

答案 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