python - 具有上限的 Scipy 泊松分布

标签 python scipy statistics poisson

我正在使用 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/

相关文章:

python - 在 Windows 7 64 位 PC 上安装 PIL

Python "TypeError: ' bool'对象不可调用”错误

python - 从不知道此键的单项 Python dict 中获取键的惯用方法(但知道该 dict 只有一项)?

python - Scipy 数值积分

python - scipy.integrate.odeint 和 scipy.integrate.ode 有什么区别?

python - 将 Scipy curve_fit 与分段函数一起使用

fitdistr函数返回值解释

python - 导入 mysql.connector ModuleNotFoundError : No module named 'mysql'

tsql - T-SQL获取2个字符串的字符匹配百分比

Python:如何找到二维点分布的第 n 个分位数