我正在使用 scipy stats 生成一个随机数。 我使用了泊松分布。 下面是一个例子:
import scipy.stats as sct
A =2.5
Pos = sct.poisson.rvs(A,size = 20)
当我打印 Pos 时,我得到以下数字:
array([1, 3, 2, 3, 1, 2, 1, 2, 2, 3, 6, 0, 0, 4, 0, 1, 1, 3, 1, 5])
从数组中可以看到生成了一些数字,比如6。
我想要限制最大数字(假设为 5),即使用 sct.poisson.rvs 生成的任何随机数应等于或小于 5,
我如何调整我的代码来实现它。 顺便说一句,我在 Pandas Dataframe 中使用它。
最佳答案
我认为解决方案非常简单(假设我正确理解了您的问题):
# for repeatability:
import numpy as np
np.random.seed(0)
from scipy.stats import poisson, uniform
sample_size = 20
maxval = 5
mu = 2.5
cutoff = poisson.cdf(maxval, mu)
# generate uniform distribution [0, cutoff):
u = uniform.rvs(scale=cutoff, size=sample_size)
# convert to Poisson:
truncated_poisson = poisson.ppf(u, mu)
然后打印(truncated_poisson)
:
[2. 3. 3. 2. 2. 3. 2. 4. 5. 2. 4. 2. 3. 4. 0. 1. 0. 4. 3. 4.]
关于python - 具有上限的 Scipy 泊松分布,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52398903/