Python-Numpy-Poisson分布

2024-04-24 16:23:55 发布

您现在位置:Python中文网/ 问答频道 /正文

为了完整起见,我生成一个高斯函数,这是我的实现:

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.5fwhm=0.1。到目前为止还不有趣。在下一步中,我使用numpysrandom.poisson实现计算数据集的泊松分布。

poi = random.poisson(lam=y)

我有两个大问题。

  1. 泊松的一个特点是方差等于经验值, 比较mean()和var()的输出会让我觉得 输出不相等。
  2. 绘制此图时,泊松分布仅占整数值 最大值大约是7,有时是6,而我以前的函数 y的最大值是1。如果知道,泊松函数应该 给我一点我实际功能的“拟合度”,为什么最大的。 价值观不平等?很抱歉我的数学错误, 实际上,我这样做是为了模拟泊松分布噪声,但是 我猜你理解这一点。

编辑:3。问:在这种情况下,“size”变量用于什么?我见过不同类型的用法,但最终它们并没有给我不同的结果,而是在选择错误时失败了。。。

编辑2:好吧,从我得到的答案来看,我认为我还不够清楚(尽管它已经帮助我纠正了我犯的一些愚蠢的错误,谢谢你!)。我要做的是对函数y应用poisson(白)噪声。正如MSeifert在下面的文章中所描述的,我现在使用期望值lam。但这只会给我带来噪音。我想我对如何应用th{I s,e}噪声有一些理解上的问题(也许它更与物理有关?!)。


Tags: 函数fromimportnumpylog编辑错误sqrt
1条回答
网友
1楼 · 发布于 2024-04-24 16:23:55

首先,假设您import numpy as np,我将编写这个答案,因为它清楚地将numpy函数与python的内置函数或mathrandom包的函数区别开来。

我认为没有必要回答你的具体问题,因为你的基本假设是错误的:

是的,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个值的高斯和泊松分布:

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.varnp.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

注意高斯值几乎就是我们定义的参数。另一方面,poisson均值和var几乎相等。您可以通过增加上面的size来提高均值和var的精度。

为什么泊松分布不接近原始信号

原始信号只包含0到1之间的值,因此泊松分布只允许正整数,标准差与平均值相关联。从高斯分布的平均值来看,信号近似为0,所以泊松分布几乎总是画0。高斯函数的最大值是1。1的泊松分布如下所示(左边是信号+泊松,右边是泊松分布,值为1)

enter image description here

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

enter image description here

相关问题 更多 >