我需要在Python 3中编写一个函数,该函数返回根据均匀空间泊松过程分散的矩形字段(例如100x100点)上的位置(x,y)的数组。

到目前为止,我已经使用Python代码找到了该资源,但是不幸的是,我无法找到/安装适用于Python的scipy 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

>>> 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来模拟以速率1散布在一个字段上的10个对象。
>>> 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)建模散布在二维字段n上的对象的许多dx*dy

最佳答案

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

x = np.random.rand(n)
y = np.random.rand(n)

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

我认为这些位置的“随机性”应通过随机的Poisson过程确定,但似乎只是位置数需要由它确定,而不是实际位置值。

关于python - 带有numpy的Python 3中的Poisson Point Process,不带scipy,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31133232/

10-12 18:57