如何在圆中生成齐次泊松点过程?

时间:2015-08-03 03:26:02

标签: 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

2 个答案:

答案 0 :(得分:1)

我找到了答案。我只是将极坐标转换为笛卡尔坐标,然后使用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

答案 1 :(得分:0)

晚了几年,但是几个月前我写了这个问题。参见此post

对于将来的读者,这是我的代码:

public class SekretarisAdapter extends RecyclerView.Adapter<SekretarisAdapter.ViewHolder> {

    private List<Sekretaris.Siswa> dataSiswa;
    private List<Sekretaris.Kelas> dataKelas;

    ...

    public swap(List<Sekretaris.Siswa> dataSiswa, List<Sekretaris.Kelas> dataKelas) {

      this.dataSiswa = dataSiswa;
      this.dataKelas = dataKelas;
      notifyDataSetChanged();
    }
}

样本: A realization of a Poisson point process on a disk