均匀分布描述了一个实验,其中随机结果位于特定范围之间。结果的界限由参数 a 和 b 定义,它们是最小值和最大值。分布上所有相同长度的区间具有相等的概率。

均匀分布的概率密度函数(pdf)定义为:

NumPy 均匀分布

其中,a和b分别是输出区间的下边界和上边界.

均匀分布的均值 (a+b)/2 和方差 (b-a)2/12。

累积分布函数(cdf) 在 x 处评估,是随机变量 (X) 取小于或等于 x 的值的概率。均匀分布的cdf定义为:

NumPy 均匀分布

NumPy random.uniform() 函数返回均匀分布的随机样本。

语法

numpy.random.uniform(low=0.0, high=1.0, size=None) 

参数

low可选。 指定输出间隔的下限。 float 或 array_like of floats。默认值为 0.0。
heigh可选。 指定输出区间的上限。 float 或 array_like of floats。必须是非负数。默认值为 1.0。
size可选。 指定输出形状。 int 或 int 元组。如果给定形状为(m, n, k),则绘制m * n * k个样本。如果 size 为 None(默认),并且 low 和 high 均为标量,则返回单个值。否则,将抽取 np.broadcast(low, high).size 样本。

返回值

从参数化均匀分布返回样本。 ndarray 或标量。

示例:均匀分布的值

在下面的示例中,random.uniform() 函数用于创建给定矩阵包含从指定均匀分布中抽取的随机值的形状。

import numpy as np

size = (5,3)

sample = np.random.uniform(0, 1, size)
print(sample) 

上述代码的可能输出可能是:

[[0.93041354 0.50856806 0.46275855]
 [0.31003963 0.10581335 0.64064579]
 [0.58998769 0.44103259 0.44828118]
 [0.22591024 0.10336945 0.74814414]
 [0.95073832 0.70598443 0.4166474 ]] 

绘制均匀分布

示例:密度图

Matplotlib是Python的绘图库,可用于绘制均匀分布的概率密度函数(pdf)使用 hist() 函数。

import matplotlib.pyplot as plt
import numpy as np

#修复种子以提高重现性
#结果
np.random.seed(10)

size = 10000
#抽取10000个样本
#均匀分布
sample = np.random.uniform(0, 1, size)
bin = np.arange(-1,2,0.05)

plt.hist(sample, bins=bin, edgecolor='blue') 
plt.title("Uniform Distribution") 
plt.show() 

上述代码的输出将是:

NumPy 均匀分布

示例:比较 pdf

可以使用 Seaborn kdeplot() 函数以图形方式比较多个概率密度函数。 在下面的示例中,比较了三个均匀分布(每个分布具有不同的低值和高值)的 pdf。

import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns

#修复种子以提高重现性
#结果
np.random.seed(10)

size = 10000
#绘制10000个样本
#不同的均匀分布
sns.kdeplot(np.random.uniform(0, 1, size))
sns.kdeplot(np.random.uniform(0, 2, size))
sns.kdeplot(np.random.uniform(0, 3, size))

plt.legend(["a = 0, b = 1", 
            "a = 0, b = 2", 
            "a = 0, b = 3"])
plt.show() 

上述代码的输出将是:

NumPy 均匀分布

示例:比较 cdfs

多次累积可以使用 Seaborn ecdfplot() 函数以图形方式比较分布函数。在下面的示例中,比较了三个均匀分布(每个具有不同的低值和高值)的 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.uniform(0, 1, size))
sns.ecdfplot(np.random.uniform(0, 2, size))
sns.ecdfplot(np.random.uniform(0, 3, size))

plt.legend(["a = 0, b = 1", 
            "a = 0, b = 2", 
            "a = 0, b = 3"])
plt.show() 

上述代码的输出将是:

NumPy 均匀分布