Python Numpy泊松分布

fam*_*fop 5 python numpy poisson

为了完整起见,我正在生成高斯,这是我的实现:

from numpy import *
x=linspace(0,1,1000)
y=exp(-(x-0.5)**2/(2.0*(0.1/(2*sqrt(2*log(2))))**2))
Run Code Online (Sandbox Code Playgroud)

0.5和的高峰fwhm=0.1.到目前为止没那么有趣.在下一步中,我使用numpys random.poisson实现计算我的数据集的泊松分布.

poi = random.poisson(lam=y)
Run Code Online (Sandbox Code Playgroud)

我有两个主要问题.

  1. 泊松的一个特点是方差等于exp.值,比较mean()和var()的输出确实让我感到困惑,因为输出不相等.
  2. 当绘制这个时,poisson dist.仅占用整数值 且最大值.值大约是7,有时是6,而我的旧函数y有它的最大值.在1.Afai明白,泊松函数应该给我一些"适合"我的实际函数y.怎么来最大的 价值不相等?抱歉我的数学不正确,实际上我这样做是为了模拟泊松分布的噪音,但我想你在这种情况下理解"适合".

编辑:3.问题:在这种情况下,'size'变量用于什么?我已经看到了不同类型的用法,但最后他们没有给我不同的结果,但在选择错误时失败了......

编辑2:好的,从我得到的答案我认为我不够清楚(虽然它已经帮助我纠正了我做的其他一些愚蠢的错误,谢谢!).我想要做的是将poisson(白色)噪声应用于函数y.正如MSeifert在下面的帖子中所描述的,我现在使用期望值作为lam.但这只会给我带来噪音.我想我在如何应用噪声的水平上有一些理解问题(也许它与物理学相关?!).

MSe*_*ert 13

首先,我会写这个答案假设你import numpy as np是因为它明确区分numpy从内建或那些的功能mathrandom包装蟒蛇.

我认为没有必要回答您指定的问题,因为您的基本假设是错误的:

是的,泊松统计量具有等于方差的均值,但假设您使用常数 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)
Run Code Online (Sandbox Code Playgroud)

然后绘制它,绘制直方图:

import matplotlib.pyplot as plt
plt.hist(gaussian)
plt.hist(poisson)
plt.show()
Run Code Online (Sandbox Code Playgroud)

或者使用np.histogram代替.

为了让您仍然可以使用随机抽样统计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
Run Code Online (Sandbox Code Playgroud)

请注意高斯值几乎与我们定义的参数完全相同.另一方面,泊松均值和变量几乎相等.您可以通过增加size上述值来提高均值和var的精度.

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

原始信号仅包含0到1之间的值,因此泊松分布仅允许正整数,标准差与平均值相关联.从高斯的平均值到目前为止,你的信号大约为0,因此泊松分布几乎总是为0.高斯有最大值时,值为1. 1的泊松分布看起来像这样(左边是信号+泊松在右边,泊松分布值为1)

在此输入图像描述

所以你会在那个地区得到很多0和1以及2.但是也有可能你将值绘制到7.这正是我提到的反对称性.如果你改变高斯的幅度(例如乘以1000),那么"拟合"要好得多,因为泊松分布在那里几乎是对称的:

在此输入图像描述