900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > python生成泊松分布随机数_Python-Numpy-Poisson分布

python生成泊松分布随机数_Python-Numpy-Poisson分布

时间:2019-01-21 07:07:21

相关推荐

python生成泊松分布随机数_Python-Numpy-Poisson分布

首先,假设您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个值的高斯和泊松分布: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

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

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

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

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。