Gec*_*tar 5 python numpy spatial poisson
我需要在Python 3中编写一个函数,该函数返回根据均匀空间泊松过程分散的矩形字段(例如100x100点)上的位置(x,y)的数组。
到目前为止,我已经使用Python代码找到了该资源,但是不幸的是,我无法找到/安装适用于Python 3的scipy:
http://connor-johnson.com/2014/02/25/spatial-point-processes/
但是,它帮助我了解了泊松积分过程实际上是什么以及它如何工作。
我已经使用numpy.random.poisson已有一段时间了,但是我很难解释它的返回结果。
http://docs.scipy.org/doc/numpy/reference/generation/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]]])
Run Code Online (Sandbox Code Playgroud)
我认为该命令的作用是创建一个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]]])
Run Code Online (Sandbox Code Playgroud)
但是,我不认为这应该使事情变得容易。我只会以这种方式将对象出现的速度增加10。
综上所述,我的主要问题是:如何使用二维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)
Run Code Online (Sandbox Code Playgroud)
现在我只需要将 x 值和 y 值的两个数组连接到 (x,y) 元组数组。这些是我一直在寻找的随机职位。我可以将每个 x 和 y 值乘以字段的边长(例如 100),以将值缩放到我想要显示的 100x100 字段。
我认为这些位置的“随机性”应该由随机泊松过程确定,但似乎只需要由它确定位置的数量,而不是实际的位置值。