不可预测的泊松噪音

时间:2015-07-08 10:15:40

标签: python numpy random noise poisson

我正在比较我应用 poisson 噪音的两组值。 以下是我的代码和相应的结果:

import numpy as np
import pylab

size = 14000

# 1) Creating first array
np.random.seed(1)
sample = np.zeros((size),dtype="int")+1000
# Applying poisson noise
random_sample1 = np.random.poisson(sample)

# 2) Creating the second array (with some changed values)
# Update some of the value to 2000...
for x in range(size):
  if not(x%220):
    sample[x]=2000
# Reset the seed to the SAME as for the first array
# so that poisson shall rely on same random.
np.random.seed(1)
# Applying poisson noise
random_sample2 = np.random.poisson(sample)

# Display diff result
pylab.plot(random_sample2-random_sample1)
pylab.show()

poisson_pb

我的问题是:为什么我在[10335-12542]周围有这个奇怪的值,我会期待一个完美的零点?

我在poisson()文档中搜索信息但没有成功。

我(仅)测试并重现python版本1.7.6和1.7.9中的问题(它可能出现在其他人身上)。 测试Numpy版本:1.6.2和1.9.2

如果我打印相关值,请提供更多详细信息:

random_sample1[10335:10345]
[ 977 1053  968 1032 1051  953 1036 1035  967  954]
#  OK  OK    OK   OK   OK  OK!  ???  ???  ???  ???
random_sample2[10335:10345]
[ 977 1053  968 1032 1051 2051 1035  967  954 1034]
#  OK  OK    OK   OK   OK  OK!  ???  ???  ???  ???

我们清楚地看到,直到索引10339的值与索引10340的值完全相同,因为我们有sample[10340] == 2000这是我们想要的。但接下来的价值不是我们所期望的!他们似乎从1指数转移了!

1 个答案:

答案 0 :(得分:1)

这在计算泊松分布的随机样本的算法中是隐含的。请参阅source code here.

随机样本在条件循环中计算,该循环获得新的随机值,并在此值高于某个基于lambda的阈值时返回。对于不同的lambda,它可能需要不同次数的尝试。然后将抵消以下随机值,从而导致您看到的结果不同。然后,随机值再次同步。

在您的具体示例中,它使用一个额外的随机值来获取样本#10340。之后,所有值都会偏移一个。