首先,我会写这个答案,假设你将numpy导入为np,因为它清楚地区分了numpy函数与内置函数或python的数学和随机包的函数.
我认为没有必要回答您指定的问题,因为您的基本假设是错误的:
是的,泊松统计量具有等于方差的均值,但假设您使用常数林.但你没有.你输入高斯的y值,所以你不能指望它们是恒定的(它们是你的定义高斯!).
使用np.random.poisson(lam = 0.5)从泊松分布中获取一个随机值.但要小心,因为这个泊松分布甚至与高斯分布几乎不相同,因为你处于“低均值”区间,这两个区间显着不同,例如参见Wikipedia article about Poisson distribution.
你也在创建随机数,所以你不应该真正绘制它们,而是绘制它们的np.histogram.由于统计分布都与概率密度函数有关(见Probability density function).
之前,我已经提到你创建了一个带有常数lam的泊松分布,所以现在是时候讨论大小:你创建随机数,所以要近似真实的泊松分布,你需要绘制大量的随机数.其大小来自:np.random.poisson(lam = 0.5,size = 10000)例如创建一个10000个元素的数组,每个元素从泊松概率密度函数中绘制,平均值为0.5.
如果您在之前提到的维基百科文章中没有阅读它,则泊松分布根据定义仅给出无符号(> = 0)整数作为结果.
所以我想你想要做的是创建一个包含1000个值的高斯和泊松分布:
gaussian = np.random.normal(0.5, 2*np.sqrt(2*np.log(2)), 1000)
poisson = np.random.poisson(0.5, 1000)
然后绘制它,绘制直方图:
import matplotlib.pyplot as plt
plt.hist(gaussian)
plt.hist(poisson)
plt.show()
要从随机样本中获取统计数据,您仍然可以在高斯和泊松样本上使用np.var和np.mean.而这次(至少在我的样本运行中)他们给出了很好的结果:
print(np.mean(gaussian))
0.653517935138
print(np.var(gaussian))
5.4848398775
print(np.mean(poisson))
0.477
print(np.var(poisson))
0.463471
请注意高斯值几乎与我们定义的参数完全相同.另一方面,泊松均值和变量几乎相等.您可以通过增加上面的大小来提高均值和var的精度.
为什么泊松分布不接近原始信号
原始信号仅包含0到1之间的值,因此泊松分布仅允许正整数,标准差与平均值相关联.从高斯的平均值到目前为止,你的信号大约为0,因此泊松分布几乎总是为0.高斯有最大值时,值为1. 1的泊松分布看起来像这样(左边是信号泊松和右边的泊松分布值为1)
所以你会在那个地区得到很多0和1以及2.但是也有可能你将值绘制到7.这正是我提到的反对称性.如果你改变高斯的幅度(例如乘以1000),那么“拟合”要好得多,因为泊松分布在那里几乎是对称的: