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覆盖元素。