指数分布是泊松点过程中事件之间时间的概率分布,即事件以恒定的平均速率连续且独立发生的过程。这是伽玛分布的一个特例。例如,顾客到达商店、服务器上的文件请求等。
指数分布的概率密度函数(pdf)定义为:
其中,β 是尺度参数,它是倒数速率参数 λ = 1/β。
指数分布的均值 β 和方差 β2。
累积分布函数 ( cdf) 在 x 处评估,是随机变量 (X) 取小于或等于 x 的值的概率。指数分布的cdf定义为:
NumPy random.exponential() 函数返回指数分布的随机样本。
语法
numpy.random.exponential(scale=1.0, size=None)
参数
scale | 可选。 指定尺度参数,β = 1/λ。 float 或 array_like of floats。必须是非负数。默认值为 1.0。 |
size | 可选。 指定输出形状。 int 或 int 元组。如果给定形状为(m, n, k),则绘制m * n * k个样本。如果 size 为 None(默认),并且 scale 是标量,则返回单个值。否则,将抽取 np.array(scale).size 样本。 |
返回值
返回来自参数化指数分布的样本。 ndarray 或标量。
示例:指数分布的值
在下面的示例中,random.exponential() 函数用于创建给定矩阵包含从指定指数分布中抽取的随机值的形状。
import numpy as np
size = (5,3)
sample = np.random.exponential(1, size)
print(sample)
上述代码的可能输出可能是:
[[0.71318134 0.51261985 2.21255627]
[0.38593481 0.54545811 0.39075276]
[0.56583485 1.59475025 0.13879821]
[0.82487244 0.20735562 1.33014896]
[0.21085364 1.06640552 1.33323175]]
绘制指数分布
示例:密度图
Matplotlib 是一个 Python 绘图库,可用于绘制指数分布的概率密度函数 (pdf)使用 hist() 函数。
import matplotlib.pyplot as plt
import numpy as np
#修复种子以提高重现性
#结果
np.random.seed(10)
size = 10000
#抽取10000个样本
#指数分布
sample = np.random.exponential(1, size)
bin = np.arange(0,10,0.1)
plt.hist(sample, bins=bin, edgecolor='blue')
plt.title("Exponential Distribution")
plt.show()
上述代码的输出将是:
示例:比较 pdf
可以使用 Seaborn kdeplot() 函数以图形方式比较多个概率密度函数。 在下面的示例中,比较了三个指数分布(分别具有比例因子 1、2 和 3)的 pdf。
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
#修复种子以提高重现性
#结果
np.random.seed(10)
size = 1000
#绘制1000个样本
#不同的指数分布
sns.kdeplot(np.random.exponential(1, size))
sns.kdeplot(np.random.exponential(2, size))
sns.kdeplot(np.random.exponential(3, size))
plt.legend([r"$\beta = 1$",
r"$\beta = 2$",
r"$\beta = 3$"])
plt.show()
上述代码的输出将为:
示例:比较 cdf
可以使用 Seaborn ecdfplot() 函数以图形方式比较多个累积分布函数。在下面的示例中,比较了三个指数分布(比例因子分别为 1、2 和 3)的 cdf。
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
#修复种子以提高重现性
#结果
np.random.seed(10)
size = 1000
#绘制1000个样本
#不同的指数分布
sns.ecdfplot(np.random.exponential(1, size))
sns.ecdfplot(np.random.exponential(2, size))
sns.ecdfplot(np.random.exponential(3, size))
plt.legend([r"$\beta = 1$",
r"$\beta = 2$",
r"$\beta = 3$"])
plt.show()
上述代码的输出将为: