我想在从最小值到最大值的区间内生成随机整数。对于 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/