为了完整起见,我正在生成一个高斯,这是我的实现:
from numpy import *
x=linspace(0,1,1000)
y=exp(-(x-0.5)**2/(2.0*(0.1/(2*sqrt(2*log(2))))**2))峰值在0.5和fwhm=0.1。到目前为止还没什么意思。在下一步中,我使用numpys random.poisson实现计算数据集的泊松分布。
poi = random.poisson(lam=y)我有两个大问题。
编辑: 3.问题:在这个上下文中,“大小”变量是用来做什么的?我见过不同类型的用法,但最终它们并没有给我带来不同的结果,而是在选择错误时失败了……
EDIT2:好吧,从我得到的答案来看,我觉得我还不够清楚(尽管它已经帮助我纠正了其他一些愚蠢的错误,谢谢!)我想要做的是将泊松(白色)噪声应用于函数y。正如MSeifert在下面的文章中所描述的,我现在使用期望值作为lam。但这只会给我带来噪音。我想我对如何应用th{,e}噪声有一些理解上的问题(也许更多的是与物理有关的?!)
发布于 2016-03-01 18:05:03
首先,假设您是import numpy as np,我将编写这个答案,因为它清楚地将numpy函数与构建器或python的math和random包的函数区分开来。
我认为没有必要回答你指定的问题,因为你的基本假设是错误的:
是的,泊松统计数据的平均值等于方差,但假设您使用的是常数 lam。但是你没有。你输入高斯的y值,所以你不能期望它们是常数(根据你的定义,它们是高斯的!)。
使用np.random.poisson(lam=0.5)从泊松分布中获得一个随机值。但是要小心,因为这个泊松分布甚至与你的高斯分布不完全相同,因为你处在一个“低平均”的区间,这两个分布都有很大的不同,例如见维基百科关于泊松分布的文章。
此外,您正在创建随机数,因此您不应该真正地绘制它们,而应该绘制它们的np.histogram。因为统计分布都是关于概率密度函数的(参见概率密度函数)。
之前,我已经提到过,您创建了一个带有常数lam的泊松分布,所以现在是讨论size的时候了:您创建了随机数,所以为了逼近真正的泊松分布,您需要绘制大量的随机数。例如,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.histogram代替。
要从随机样本中获取统计数据,仍然可以在高斯样本和泊松样本上使用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注意,高斯值几乎完全是我们定义的参数。另一方面,泊松均值和变量几乎相等。您可以通过增加上面的size来提高平均值和var的精度。
为什么泊松分布不接近你的原始信号
您的原始信号只包含0到1之间的值,因此泊松分布只允许正整数,标准差被链接到平均值。到目前为止,距离高斯信号的平均值很近,所以泊松分布几乎总是0。高斯的最大值是1,1的泊松分布看起来是这样的(左边是信号+泊松,右边是1的泊松分布)。

在这个区域,你会得到很多0,1和2的值。但也有一些可能性,你得出的数值高达7,这正是我提到的不对称。如果你改变高斯的振幅(例如,乘以1000 ),“拟合”要好得多,因为泊松分布几乎是对称的:

https://stackoverflow.com/questions/35729290
复制相似问题