如何在Python中使用random.expovariate()生成整数到达时间间隔

4 投票
1 回答
5308 浏览
提问于 2025-04-18 09:56

在Python的random模块中,expovariate()这个函数可以生成浮点数,这些浮点数可以用来模拟泊松过程中的到达时间间隔。那我该怎么做才能生成到达之间的整数时间,而不是浮点数呢?

1 个回答

4

jonrsharpe已经提到过,你可以让这个函数生成浮点数,然后自己用 int() 把结果转换成整数。

这样

>>> import random
>>> [random.expovariate(0.2) for i in range(10)]
[7.3965169407177465, 6.950770519458953, 9.690677483221426, 2.1903490679843927, 15.769487400856976, 3.508366058170216, 2.1922982271553155, 2.591955678743926, 7.791150855029359, 22.180358323964935]

就应该写成

>>> import random
>>> [int(random.expovariate(0.2)) for i in range(10)]
[0, 10, 5, 15, 4, 0, 0, 4, 5, 4]

另一个例子

>>> import random
>>> [int(random.expovariate(0.001)) for i in range(10)]
[435, 64, 575, 2147, 1233, 1630, 1128, 899, 180, 1190]

上面的例子使用了列表推导式,一行就能生成多个结果。当然,也可以简化成

>>> import random
>>> int(random.expovariate(0.1)
5

注意,如果你给 .expovariate() 传一个较大的数字,得到的浮点数结果更可能是较小的。而当你用 int() 把这些浮点数转换成整数时,0到1之间的数字会被转换成0。

撰写回答