首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python 3中的Poisson点过程

Python 3中的Poisson点过程
EN

Stack Overflow用户
提问于 2015-06-30 08:27:40
回答 2查看 6.9K关注 0票数 8

我需要用Python 3编写一个函数,它返回矩形域上的一个位置(x,y)数组(例如,100x100点),这些位置按照一个均匀的空间泊松过程分散。

到目前为止,我已经在Python代码中找到了这个资源,但不幸的是,我无法为Python 3找到/安装code 3:

http://connor-johnson.com/2014/02/25/spatial-point-processes/

它帮助我理解了泊松点过程实际上是什么,以及它是如何工作的。

我已经和numpy.random.poisson玩了很长一段时间了,但是我很难理解它的回报。

http://docs.scipy.org/doc/numpy/reference/generated/numpy.random.poisson.html

代码语言:javascript
复制
>>> import numpy as np
>>> np.random.poisson(1, (1, 5, 5))
array([[[0, 2, 0, 1, 0],
        [3, 2, 0, 2, 1],
        [0, 1, 3, 3, 2],
        [0, 1, 2, 0, 2],
        [1, 2, 1, 0, 3]]])

我认为该命令所做的是创建一个5x5字段= (1,5,5),并在该字段上以lambda =1的速率散射对象。结果矩阵中显示的数字是物体躺在该特定位置上的概率。

我怎么能根据一个均匀的空间泊松过程,在5x5场上散射10个物体?我的第一个猜测是对整个数组进行迭代,然后在每个位置上插入一个"3“对象,然后在每一个其他位置上插入一个"2",等等,但我不确定应该使用什么实际的概率来确定是否应该插入一个对象。

根据以下资源,我可以通过简单地乘以速率和对象计数( 10 *1 = 10)并使用该值作为我的lambda来模拟10个对象散布在一个字段上的速率为1。

代码语言:javascript
复制
>>> np.random.poisson(10, (1, 5, 5))
array([[[12, 12, 10, 16, 16],
        [ 8,  6,  8, 12,  9],
        [12,  4, 10,  3,  8],
        [15, 10, 10, 15,  7],
        [ 8, 13, 12,  9,  7]]])

然而,我不认为这会使事情变得更容易。这样,我只会将对象出现的速度提高10倍。

Poisson point process in matlab

总之,我的主要问题是:如何使用numpy.random.poisson(lam, size)来建模散布在二维字段dx*dy上的多个对象的n

EN

回答 2

Stack Overflow用户

发布于 2015-07-03 08:40:39

看来我看错了这个问题。经过更多的离线研究,我发现创建一个表示对象数量的随机泊松值,例如n = np.random.poisson(100),并在0到1之间创建相同数量的随机值就足够了。

代码语言:javascript
复制
x = np.random.rand(n)
y = np.random.rand(n)

现在,我只需要将x-和y-值的两个数组连接到(x,y)元组的数组中。这些都是我在寻找的随机位置。我可以将每个x和y值乘以我的字段的边长,例如100,以便将值缩放到我想要显示的100x100字段。

我认为这些位置的“随机性”应该由一个随机泊松过程来决定,但似乎仅仅是位置的数目需要由它来决定,而不是实际的位置值。

票数 3
EN

Stack Overflow用户

发布于 2019-04-03 02:52:22

这都是正确的。您肯定不需要SciPy,不过当我第一次用Python模拟泊松点过程时,我也使用了SciPy。在这篇文章中,我介绍了模拟过程中的原始代码和详细信息:

https://hpaulkeeler.com/poisson-point-process-simulation/

我只是在最近的代码中使用NumPy:

代码语言:javascript
复制
import numpy as np; #NumPy package for arrays, random number generation, etc
import matplotlib.pyplot as plt #for plotting

#Simulation window parameters
xMin=0;xMax=1;
yMin=0;yMax=1;
xDelta=xMax-xMin;yDelta=yMax-yMin; #rectangle dimensions
areaTotal=xDelta*yDelta;

#Point process parameters
lambda0=100; #intensity (ie mean density) of the Poisson process

#Simulate a Poisson point process
numbPoints = np.random.poisson(lambda0*areaTotal);#Poisson number of points
xx = xDelta*np.random.uniform(0,1,numbPoints)+xMin;#x coordinates of Poisson points
yy = yDelta*np.random.uniform(0,1,numbPoints)+yMin;#y coordinates of Poisson points

代码也可以在这里找到:

https://github.com/hpaulkeeler/posts/tree/master/PoissonRectangle

我还上传了更多Python (以及MATLAB和Julia)代码,用于模拟几个点进程,包括不同形状上的Poisson点过程和集群点过程。

https://github.com/hpaulkeeler/posts

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31133232

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档