在最小值和最大值之间生成随机整数的指数分布

3 投票
2 回答
4122 浏览
提问于 2025-04-18 10:56

我想在一个最小值和最大值之间生成随机整数。使用numpy中的均匀分布:

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

这正好满足我的需求。

不过,现在我想让生成的随机数有一个指数偏差。网上有很多建议,比如伪随机数生成器 - 指数分布,还有numpy的一个函数numpy.random.RandomState.exponential,但这些方法没有说明如何把生成的随机数限制在最小值和最大值之间。我不太确定怎么做到这一点,同时又能保持随机分布。

2 个回答

0

你可以试着把所有的偏差加起来。然后生成一个整数的概率可以用这个公式来表示:j= j的偏差 / 总偏差。你可以用蒙特卡洛模拟来实现这个过程。

0

指数分布是一种连续的分布。你可能想要的是它的离散版本,也就是几何分布Numpy库的实现会生成严格大于零的整数,也就是1, 2, 3,等等。所以你需要加上min-1来调整范围,然后把大于max的结果去掉。这意味着你需要一个一个地生成这些数,把没有被去掉的值放到一个列表里,直到你得到想要的数量。(你也可以通过计算预期被去掉的比例,来相应地调整你的n值,但最终可能还是会少几个或者多几个。)

其实也可以不去掉结果,但那样你需要自己创建一个反转算法,计算超过max的概率,然后生成一个在0到这个概率之间的随机数来输入到你的反转算法中。虽然不去掉结果的方法更复杂,但去掉结果的方法更简单,尽管效率稍低。

撰写回答