Python 不可预测泊松噪声

Python 不可预测泊松噪声,python,numpy,random,noise,poisson,Python,Numpy,Random,Noise,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 t

我正在比较两组应用泊松噪声的值。 下面是我的代码和相应的结果:

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()

我的问题是:为什么我在[10335-12542]附近会有这个奇怪的值,而我只期望一个完美的零

我在文档中搜索信息但未成功

我(仅)在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个索引移动

这在计算泊松分布随机样本的算法中是隐含的。见

随机样本在条件循环中计算,该循环获取一个新的随机值,并在该值高于基于lambda的某个阈值时返回。对于不同的lambda,可能需要不同的尝试次数。然后,以下随机值将被偏移,从而产生不同的结果。之后,随机值将再次同步


在您的特定示例中,它使用一个额外的随机值来获取样本#10340。在这之后,所有的值都被一抵消。

感谢您指出这一点,但在我看来,对rk_poisson_ptrs()的每次调用都应该是独立的,不会干扰下一次调用。你不这么认为吗?它绝对不是独立的,因为一旦你设定了种子,RNG的整个数字序列都是固定的。您的案例的一个解决方法是首先为lambda=1000生成随机_样本2,然后在第二步中用lambda=2000覆盖元素。