python - 来自最小值和最大值之间的指数分布的随机整数

标签 python numpy random exponential-distribution

我想在从最小值到最大值的区间内生成随机整数。对于 numpy 中的均匀分布:

numpy.random.randint(min,max,n)

完全按照我的意愿行事。

但是,我现在想给随机数的分布一个指数偏差。对此有很多建议,例如Pseudorandom Number Generator - Exponential Distribution以及 numpy 函数 numpy.random.RandomState.exponential,但这些函数并未解决如何将分布约束为最小值和最大值之间的整数。我不确定如何做到这一点,同时仍然确保随机分布。

最佳答案

指数分布是一种连续分布。你可能想要的是它的离散等价物,geometric distribution . Numpy's implementation生成严格的正整数,即 1,2,3,...,因此您需要添加 min-1 来移动它,然后通过拒绝/丢弃结果来截断 >最大。反过来,这意味着一个一个地生成它们,并将未拒绝的值添加到列表中,直到获得所需的数字。 (您还可以通过分析来确定您希望被拒绝的比例,并相应地缩放您的 n,但您仍然可能会以少一些或多一些而告终。)

可以在不拒绝的情况下执行此操作,但您必须创建自己的反演,确定超过 max 的概率,并生成介于 0 和该概率之间的制服以提供给您的反演算法。尽管效率较低,但拒绝更简单。

关于python - 来自最小值和最大值之间的指数分布的随机整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24395258/

相关文章:

python - 从一个数据框中删除另一个数据框中存在的行

ruby - 如何使用 Array#sample(n, random : rng) syntax?

python - SciPy:什么是 "generalized"连续随机变量?

python 不接受关键字参数

python - 需要帮助并行化 python 中的循环

python - 如何在未跟踪 VCS 的 Python sdist 中分发文件?

Python:只有 numpy 的低通滤波器

python - 生成所有一定次数的多项式项

python - 四处走走 "ValueError: operands could not be broadcast together"

python - python : why does random. 的新功能 choice() 单独时会正确生成,但当放在名称表达式中时它不会