为了完整起见,我生成一个高斯函数,这是我的实现:
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。问:在这种情况下,“size”变量用于什么?我见过不同类型的用法,但最终它们并没有给我不同的结果,而是在选择错误时失败了。。。
编辑2:好吧,从我得到的答案来看,我认为我还不够清楚(尽管它已经帮助我纠正了我犯的一些愚蠢的错误,谢谢你!)。我要做的是对函数y应用poisson(白)噪声。正如MSeifert在下面的文章中所描述的,我现在使用期望值lam。但这只会给我带来噪音。我想我对如何应用th{I s,e}噪声有一些理解上的问题(也许它更与物理有关?!)。
首先,假设您
import numpy as np
,我将编写这个答案,因为它清楚地将numpy
函数与python的内置函数或math
和random
包的函数区别开来。我认为没有必要回答你的具体问题,因为你的基本假设是错误的:
是的,poisson统计量的平均值等于方差,但假设您使用常数
lam
。但是你没有,你输入高斯的y值,所以你不能期望它们是常数(根据你的定义是高斯的!)。使用
np.random.poisson(lam=0.5)
从泊松分布中获取一个随机值。但是要小心,因为这个poisson分布甚至与高斯分布不完全相同,因为你处于“低均值”区间,这两个区间都有显著的不同,请参见Wikipedia article about Poisson distribution。另外,您正在创建随机数,因此不应该真正地绘制它们,而应该绘制其中的一个
np.histogram
。因为统计分布都是概率密度函数(见Probability density function)。之前,我已经提到过,你用常数
lam
来创建泊松分布,现在是时候讨论一下size
:你创建随机数,所以为了近似真实的泊松分布,你需要绘制很多随机数。大小如下:np.random.poisson(lam=0.5, size=10000)
例如,创建一个10000个元素的数组,每个元素从泊松概率密度函数中提取,平均值为0.5
。如果你还没有在维基百科的文章中读过,在泊松分布给出定义之前,结果是只有无符号(>;=0)整数。
所以我猜你想做的是创建一个包含1000个值的高斯和泊松分布:
然后绘制直方图:
或者使用^{} 代替。
要从随机样本中获取统计信息,您仍然可以对高斯和泊松样本使用
np.var
和np.mean
。这次(至少在我的样本测试中)他们给出了很好的结果:注意高斯值几乎就是我们定义的参数。另一方面,poisson均值和var几乎相等。您可以通过增加上面的
size
来提高均值和var的精度。为什么泊松分布不接近原始信号
原始信号只包含0到1之间的值,因此泊松分布只允许正整数,标准差与平均值相关联。从高斯分布的平均值来看,信号近似为0,所以泊松分布几乎总是画0。高斯函数的最大值是1。1的泊松分布如下所示(左边是信号+泊松,右边是泊松分布,值为1)
所以在那个区域你会得到很多0和1,还有一些2。但也有一些可能性,你画的值高达7。这正是我提到的反对称。如果改变高斯分布的振幅(例如乘以1000),“拟合”会更好,因为泊松分布在这里几乎是对称的:
相关问题 更多 >
编程相关推荐