我试图对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.我在这里做错了吗?
答案 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