首页 > 解决方案 > 使用泊松增量创建向量

问题描述

如果我们从 0 到 1 之间的向量开始,M = 100 个增量

z = np.linspace(0,10,M)

该向量具有从 0 到 1 的相等增量。

我想创建一个新向量,其中增量 z_{n+1}-z_n 根据带有参数 lambda 的泊松分布分布。我通过 cumsum 尝试了这个

lam = 10000
dz = np.random.poisson(lam, M)
z = np.cumsum(dz)

但我不确定这是否正确?这个新向量 z 的增量是否会通过泊松分布分布?

在此处输入图像描述

标签: pythonnumpypoisson

解决方案


感谢更新,我现在明白问题所在了。答案是不; 你不应该期望向量z的增量是泊松分布。

为了说明原因,让我们创建一堆不同的泊松分布并将它们加在一起。

a = np.random.poisson(1000, 200)
b = np.random.poisson(1000, 200)
c = np.random.poisson(1000, 200)
d = np.random.poisson(1000, 200)
e = np.random.poisson(1000, 200)

plt.figure(figsize=(15, 10))
plt.hist(a+b, bins=200)
plt.hist(a+b+c, bins=200)
plt.hist(a+b+c+d, bins=200)

这看起来像: 在此处输入图像描述

很酷,所以我们可以看到结果似乎仍然是泊松分布的,但是直方图移动得越来越高。还要注意 lambda 参数的线性缩放。所有的分布都有 lambda=1000,当我将 2 加在一起时,结果看起来像 lambda = 2000 的分布,当我添加 3 时,它看起来像 lambda=3000。

因此,这实际上只是大致地看待问题,似乎以这种方式添加向量保留了泊松行为,并增加了 lambda 值。

但是,您的用例是每个区间必须是从泊松分布中提取的值。假设我们的向量从 开始[lambda, 0, 0, ..., 0],其中 lambda 表示从具有速率参数 lambda 的泊松分布中提取的值。为了获得该ith值,我们将另一个从泊松中提取的值 lambda 添加到该(i-1)th值。所以我们的向量看起来像[l, l+l, 0, ..., 0]。如果我们重复这一点,我们的向量是:

z = [l, l+l, l+l+l, ..., l+ ...n-1 times... l]

这肯定不是泊松分布。这大致相当于从我绘制的每个直方图中提取一个值。您的图表看起来如此的原因是因为数组中后面的值非常高,当然它们是,最终值是平均值接近 10,000 的 1000 个值的总和!直方图绘制等间距的 bin。如果你将垃圾箱的数量设置得太低,你会得到一个厚块。如果将其设置得太高,您将获得每个包含单个值计数的离散块,大致位于i*lambda,其中i是数组元素的索引。

最后一点要注意;如果中间的值是从平均值为 10, 000 的分布中提取的,则您不能要求数组以 0 开头并以 1 结尾。除非您想做一些标准化。


推荐阅读