numpy - 序列上泊松噪声实现的再现性
问题描述
这是我的问题:我有一系列 float int 值(这是一个模拟的天文图像,但这并不重要)。我需要得到这个序列的泊松实现。然后我想改变一些值/像素并再次获得这个新序列的泊松实现。我需要不变的像素得到相同的噪声。
import numpy
from numpy.random import default_rng,randint
import copy
import pylab
# Create the two lists (with only few pixels changing)
a0 = numpy.random.randint(low=0, high=1e6, size=10000).astype('float')
a = numpy.random.randint(low=0, high=30, size=10000).astype('float')
b = copy.copy(a)
b[a0>9.9e5] += 1e6
# Run poisson on them
gen1 = default_rng(seed=1234)
gen2 = default_rng(seed=1234)
resa = gen1.poisson(a)
resb = gen2.poisson(b)
# Plot the difference (reshape to 2D image to better see the differences)
pylab.imshow(resa.reshape((100,100))-resb.reshape((100,100)), vmin=-10,vmax=10)
使用泊松的numpy实现(numpy.random.poisson),即使种子相同,即使对于相同的像素,序列也会有所不同。原因是泊松噪声是在一个条件循环中计算的,它获取一个新的随机值,并在该值高于某个基于 lambda 的阈值时返回。因此,在两个不同的像素之后,default_rng(或RandomState)在两个序列中会有所不同,即使对于相同的像素也会给出不同的结果。
是否有泊松的实现可以保证在 RandomState 生成器上绘制相同数量的信号,无论信号级别如何?或者我是否必须自己调整代码(通过循环绘制以始终达到预定义的循环迭代)?
解决方案
推荐阅读
- excel - 如何在Excel中指定另一个单元格左侧的单元格
- c - 在 c 中实现列表和队列的最快方法是什么?
- java - 为什么在使用 Room 库插入数据库时出现异常?
- django - Python(Django):我希望每当用户单击提交按钮时触发付款表单(代码),并且仅在付款成功时才保存到数据库中
- java - hashMap 为现有键返回零值?
- excel - 使用范围在范围内搜索
- karate - 加特林模拟完成后如何运行空手道特征文件
- html - Django - 图像滚动功能在本地主机上不起作用,但在 127.0.0.1 上完美运行
- flutter - 扑。拖动后抛出小部件
- python-3.x - 为什么moviepy连接函数不能与列表一起使用?