python - 如何生成圆周内的齐次泊松点过程?

标签 python poisson

我想在圆心 (0,0) 和半径 R=200 的圆 C 中生成 N 个点。这些点服从泊松分布。换句话说,我想在 C 中生成 N 个齐次泊松点过程 (HPPP)。

我找到了这篇论文 Generating Homogeneous Poisson Processes .在第 2 节中,正是我想要的。具体来说,在第 4 页中,算法 3 在 C 中生成点 HPPP。

我用 Python 实现了这段代码如下:

""" Main Codes """    
import matplotlib.pyplot as plt
import numpy as np


lamb = 0.0005 # the rate
pi = np.pi # pi = 3.14...
r = 200 # the radius of the circle C
mean = lamb * pi * r ** 2 # the mean of the Poisson random variable n
n = np.random.poisson(mean) # the Poisson random variable (i.e., the number of points inside C)
u_1 = np.random.uniform(0.0, 1.0, n) # generate n uniformly distributed points 
radii = np.zeros(n) # the radial coordinate of the points
for i in range(n):
    radii[i] = r * (np.sqrt(u_1[i]))
u_2 = np.random.uniform(0.0, 1.0, n) # generate another n uniformly distributed points 
angle = np.zeros(n) # the angular coordinate of the points
for i in range(n):
    angle[i] = 2 * pi * u_2[i]

""" Plots """
fig = plt.gcf()
ax = fig.gca()
plt.xlim(-300, 300)
plt.ylim(-300, 300)
circ = plt.Circle((0, 0), radius=200, color='r', linewidth=2, fill=False)
plt.polar(angle, radii, 'bo')
ax.add_artist(circ)
plt.show()

首先,我看不到圆圈内的点。其次,我不知道为什么点不能在圆内正确生成。我的代码有问题吗?

输出如下:圆 C 为红色。

enter image description here

最佳答案

我找到了答案。我只是将极坐标转换为笛卡尔坐标,然后使用 plt.plot() 而不是 plt.polar() 进行绘图。

# Cartesian Coordinates
x = np.zeros(n)
y = np.zeros(n)
for i in range(n):
    x[i] = radii[i] * np.cos(angle[i])
    y[i] = radii[i] * np.sin(angle[i])

plt.plot(x,y,'bo')

所以我得到了想要的输出。

enter image description here

关于python - 如何生成圆周内的齐次泊松点过程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31778995/

相关文章:

r - 如何使用预测()

c - 求解带状矩阵方程组

python - pandas 返回列名 对每一行应用函数

python - Django form.save一步一步

python - 无法导入模块python ImportError

r - 在 R 泊松回归中使用 CARET 和 GAM ("gamSpline"方法)

c - 泊松计算(erlang C)

c++ - C++ |等 ionic 物理的单元内粒子模拟-标准网格上的泊松方程求解器

python - 我可以为我的枚举的两个不同成员使用一个别名吗

python - 如何为 TensorBoard 图像添加标签?