Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python3中的泊松点进程,带numpy,不带scipy_Python_Numpy_Spatial_Poisson - Fatal编程技术网

Python3中的泊松点进程,带numpy,不带scipy

Python3中的泊松点进程,带numpy,不带scipy,python,numpy,spatial,poisson,Python,Numpy,Spatial,Poisson,我需要在Python3中编写一个函数,它返回矩形字段(例如100x100点)上的位置数组(x,y),这些位置根据均匀的空间泊松过程分散 到目前为止,我已经在Python代码中找到了此资源,但不幸的是,我无法找到/安装scipy for Python 3: 不过,它帮助我理解了泊松点过程实际上是什么,以及它是如何工作的 我已经和numpy.random.poisson玩了一段时间了,但是我很难解释它返回了什么 我认为该命令所做的是创建一个5x5字段=(1,5,5),并在该字段上以lambda=

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

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

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

我已经和numpy.random.poisson玩了一段时间了,但是我很难解释它返回了什么

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

我怎样才能根据均匀的空间泊松过程,在5x5区域上散布十个物体呢?我的第一个猜测是迭代整个数组,然后在每个位置插入一个对象,每个位置上都有一个“3”,然后在其他位置插入一个对象,每个位置上都有一个“2”,以此类推,但我不确定应该使用什么样的实际概率来确定是否应该插入一个对象

根据以下资源,我可以通过简单地将速率与对象计数(10*1=10)相乘,并使用该值作为lambda,模拟10个对象以1的速率分散在一个区域上,即

>>> 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


总而言之,我的主要问题是:我如何使用
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字段


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

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

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

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
代码也可以在此处找到:

我还上传了更多Python(以及MATLAB和Julia)代码,用于模拟多个点过程,包括各种形状上的泊松点过程和簇点过程


我可能会很困惑,但你不想要
x,y=np.random.poisson(lam,(2,n))
?那只会返回两个(一维)随机泊松分布的数组:
>np.random.poisson(1,(2,10))
返回
数组([[1,2,1,0,0,1,0,2],[0,3,1,3,0,2])
不过,我要寻找的是一种将这些值解释为实际对象的方法。我认为这样解释更容易:想象一个10cm x 10cm大小的场。假设田野在户外,而且正在下雨。雨滴按照均匀泊松点过程下落。我只想知道前十滴雨滴会落在那块地上的确切位置。
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