我想在最小到最大的间隔内生成随机整数。在numpy中统一分布:
numpy.random.randint(min,max,n)
完全符合我的要求。
但是,我现在想给随机数的分布指数偏差。对此有很多建议,例如Pseudorandom Number Generator - Exponential Distribution以及numpy函数numpy.random.RandomState.exponential
,但这些并没有解决如何将分布限制为min和max之间的整数。我不确定如何做到这一点,同时仍然确保随机分发。
答案 0 :(得分:0)
指数分布是连续分布。您可能想要的是它的离散等价物geometric distribution。 Numpy's implementation生成严格正整数,即1,2,3,...,因此您需要添加min-1
来移动它,然后通过拒绝/丢弃结果来截断{{1} }。反过来,这意味着逐个生成它们将未拒绝的值添加到列表中,直到获得所需的数字。 (您还可以通过分析确定您希望被拒绝的比例,并相应地扩展您的> max
,但您仍然可能会缩短一些短片或者一些太多。)
可以在没有拒绝的情况下执行此操作,但您必须创建自己的反演,确定超过n
的概率,并生成0到0之间的制服以及反馈算法的概率。即使效率较低,拒绝也会更简单。
答案 1 :(得分:0)
也许您可以尝试总结所有偏见。然后产生整数j= bias of j / total bias
的概率。您可以使用蒙特卡洛模拟来实现这一点。