Python 中 random.expovariate 函数的作用与使用方法
random.expovariate(lambd)
是 Python 的 random 模块中用于生成服从指数分布的随机浮点数的函数。其中,$\lambda$ 是指数分布的参数,取值范围为正实数。该函数返回一个大于零的随机浮点数,其概率密度函数为:
$$ f(x; \lambda) = \lambda e^{-\lambda x} $$
因此,随机生成的浮点数 x 的期望值为
$$ E(x) = \frac{1}{\lambda} $$
可见,当 $\lambda$ 越大时,生成的随机浮点数越小的概率越大。
random.expovariate 函数的使用方法
下面是 random.expovariate 函数的使用方法:
import random
# 生成服从参数为 lambd 的指数分布的随机浮点数
result = random.expovariate(lambd)
print(result)
其中,lambd 是指数分布的参数,由调用者指定。为了生成服从指数分布的随机数,需要先确定指数分布的参数 $\lambda$。下面是两个实例:
实例1:随机生成壶咖啡泡制的时间间隔
某家咖啡店有一台咖啡机,每隔一段时间会自动冲泡一壶咖啡。为了让冲泡时间更接近真实情况,我们可以利用指数分布生成随机数来模拟冲泡时间间隔。
假设每隔平均 10 分钟冲泡一壶咖啡,则指数分布的参数为 $\lambda = \frac{1}{10}$。下面的代码可以生成一个接近于指数分布的随机浮点数,表示空闲时间间隔:
import random
lambd = 1 / 10 # 均值为 10 分钟
idle_time = random.expovariate(lambd)
print(idle_time)
实例2:模拟随机变量的取值
指数分布的性质之一是“无记忆性”,即概率分布与前面的随机变量取值无关。下面的程序演示了:在一个循环中,不断生成服从参数为 $\lambda$ 的指数分布的随机浮点数,将其求和并计算平均值,然后输出平均值和理论平均值 $\frac{1}{\lambda}$。可以看到,随着样本数的增加,取得的随机浮点数的平均值越来越接近理论平均值。
import random
lambd = 1 / 10 # 指数分布的参数
N = 100000 # 循环次数
sum = 0
for i in range(N):
xi = random.expovariate(lambd)
sum += xi
avg = sum / N
print("样本平均值 = ", avg)
print("理论平均值 = ", 1/lambd)
输出结果:
样本平均值 = 9.977981701803017
理论平均值 = 10.0