从最小值和最大值之间的指数分布的随机整数

时间:2014-06-24 20:01:01

标签: python numpy random exponential-distribution

我想在最小到最大的间隔内生成随机整数。在numpy中统一分布:

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

完全符合我的要求。

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

2 个答案:

答案 0 :(得分:0)

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

可以在没有拒绝的情况下执行此操作,但您必须创建自己的反演,确定超过n的概率,并生成0到0之间的制服以及反馈算法的概率。即使效率较低,拒绝也会更简单。

答案 1 :(得分:0)

也许您可以尝试总结所有偏见。然后产生整数j= bias of j / total bias的概率。您可以使用蒙特卡洛模拟来实现这一点。