使用 Python 展示统计学中的离散均匀分布


在统计学领域,概率分布在对各种随机现象进行建模和分析中发挥着重要作用。离散均匀分布就是其中之一。当处理具有等可能结果的离散随机变量时,它尤其有用。在本文中,我们将借助 Python 编程,使用 scipy.stats.randint() 函数来探讨离散均匀分布。

Scipy 是一个功能强大的 Python 库,用于科学分析和计算。stats 模块提供了用于统计分析的工具,包括概率分布。

scipy.stats 模块中的 randint() 函数表示离散均匀变量,它从通用方法继承其功能,作为 rv_discrete 类的实例。它允许有效地处理随机离散变量。

randint() 函数的参数

randint 函数接受许多控制分布行为的参数。这些参数包括:

  • low (loc) - 它是分布的下界,表示可能的最小结果。它是包含的,即它可以是分布的一部分。

  • high (loc+scale) - 它几乎与 low 相反,是分布的上界,表示可能的最大结果。但是它是排他的,即它不是分布的一部分。

  • size (x) - 它是要生成的随机变量的数量。因此,确定输出的大小。

  • moments (mvsk) - 它由 'm' = 均值,'v' = 方差,'s' = 费舍尔偏度和 'k' = 费舍尔峰度组成。默认为 mv,它定义了要计算的统计矩。

创建离散均匀随机变量

这与其他库模块的实现类似,非常简单。我们首先需要导入 scipy 库。让我们创建一个随机变量,它表示骰子的六个面。

示例

Open Compiler
import scipy.stats as stats uniformDiscreteVariable = stats.randint(low=1, high=7) #created a unique discrete variable that resembles six outcomes of a dice print("UDR: \n",uniformDiscreteVariable)

输出

UDR: 
   <scipy.stats._distn_infrastructure.rv_discrete_frozen object at 0x0000023787094040>

因此,我们创建了一个离散均匀整数变量,其下界为 1(包含)且上界为 7(不包含),因此可能结果的范围为 1 到 6。

Learn Python in-depth with real-world projects through our Python certification course. Enroll and become a certified expert to boost your career.

生成离散均匀值和概率分布

我们已经定义了离散均匀变量,现在让我们看看如何从同一个变量中生成随机值或变量。让我们也生成概率分布。

rvs(low, high, loc=0, size=1, random_state=None) 方法帮助我们从定义的离散均匀变量中生成随机变量。对于概率分布,我们将使用 pmf(k, low, high, loc=0) 方法,它给出概率质量函数,即随机事件每个结果的概率。下面我们尝试打印生成的离散均匀变量和概率分布。

示例

Open Compiler
import scipy.stats as stats uniformDiscreteVariable = stats.randint(low=1, high=7) #created a unique discrete variable that resembles six outcomes of a dice res = uniformDiscreteVariable.rvs(size=10) #generating 10 random outputs i.e. dice rolls probabDistrib = uniformDiscreteVariable.pmf(res) print("UDR variates: ", res) print("PD: ", probabDistrib)

输出

UDR variates:  [2 4 2 4 5]
PD:  [0.16666667 0.16666667 0.16666667 0.16666667 0.16666667]

上次,我们定义了一个离散均匀随机变量,它公平地表示具有六个结果的骰子。在这里使用 rvs 函数,我们从同一个变量生成了 10 个随机输出,即 10 次掷骰子结果的表示。概率函数显示骰子中的每个数字都有相同的概率(1/6)。

图形化可视化

现在我们有了随机变量和概率分布,我们可以轻松地将它们绘制成图形表示,以便更好地可视化和理解。在 Python 中,matplotlib.pyplot 帮助我们对数据进行图形化表示。

示例

Open Compiler
import scipy.stats as stats import matplotlib.pyplot as plt uniformDiscreteVariable = stats.randint(low=1, high=7) #created a unique discrete variable that resembles six outcomes of a dice res = uniformDiscreteVariable.rvs(size=10) #generating 10 random outputs i.e. dice rolls probabDistrib = uniformDiscreteVariable.pmf(res) print("UDR variates: ", res) print("PD: ", probabDistrib) # Scatter plot for tossing a dice plt.scatter(res, probabDistrib) plt.xlabel('Outcomes') plt.ylabel('Probability') plt.title('Uniform Discrete Distribution') plt.show()

输出

UDR variates:  [3 3 6 1 4 6 3 5 6 4]
PD:  [0.16666667 0.16666667 0.16666667 0.16666667 0.16666667 0.16666667
   0.16666667 0.16666667 0.16666667 0.16666667]

更改位置参数

我们可以轻松地调整 low 和 high 参数以及其他参数,以修改离散均匀分布以适应各种场景。因此,让我们尝试生成两个骰子随机抛掷的离散均匀分布以及单个骰子的分布,并进行可视化。

示例

Open Compiler
import scipy.stats as stats import matplotlib.pyplot as plt uniformDiscreteVariable1 = stats.randint(low=2, high=13) uniformDiscreteVariable2 = stats.randint(low=1, high=7) # Generate random outcomes for two dice rolls res1 = uniformDiscreteVariable1.rvs(size=100) res2 = uniformDiscreteVariable2.rvs(size=100) # Calculate probability distributions for the outcomes probabDistrib1 = uniformDiscreteVariable1.pmf(res1) probabDistrib2 = uniformDiscreteVariable2.pmf(res2) print("UDR variates Two Dice: ", res1) print("PD Two Dice: ", probabDistrib1) print("UDR variates Single Dice: ", res2) print("PD Single Dice: ", probabDistrib2) # Scatter plot for tossing two dice plt.scatter(res1, probabDistrib1, color='blue', label='Two Dice') # Scatter plot for tossing a single dice plt.scatter(res2, probabDistrib2, color='red', label='Single Dice') plt.xlabel('Outcomes') plt.ylabel('Probability') plt.title('Uniform Discrete Distribution') plt.legend() plt.show()

输出

UDR variates Two Dice:  [ 5  3  5 10  2 11  2 12  4  9  4  9  6 10  8  5 11  9  2  8  9  3 12  6
 5 11  2  7  3 12  3 11  6  4  5  6  6  7 11 12  3 12  9  9  7 11 12 10
 9 10  2  6 11  6 10 10 11 10 12  6  6  4  5  6  4 10  9  7  8 10  6 11
 9  9  3  7  4 11  3 12  6  2  6 11  4 11  2  9  2  9  6  3  4 11  4  4
 7  6  5  6]
PD Two Dice:  [0.09090909 0.09090909 0.09090909 0.09090909 0.09090909 0.09090909
 0.09090909 0.09090909 0.09090909 0.09090909 0.09090909 0.09090909
 0.09090909 0.09090909 0.09090909 0.09090909 0.09090909 0.09090909
 0.09090909 0.09090909 0.09090909 0.09090909 0.09090909 0.09090909
 0.09090909 0.09090909 0.09090909 0.09090909 0.09090909 0.09090909
 0.09090909 0.09090909 0.09090909 0.09090909 0.09090909 0.09090909
 0.09090909 0.09090909 0.09090909 0.09090909 0.09090909 0.09090909
 0.09090909 0.09090909 0.09090909 0.09090909 0.09090909 0.09090909
 0.09090909 0.09090909 0.09090909 0.09090909 0.09090909 0.09090909
 0.09090909 0.09090909 0.09090909 0.09090909 0.09090909 0.09090909
 0.09090909 0.09090909 0.09090909 0.09090909 0.09090909 0.09090909
 0.09090909 0.09090909 0.09090909 0.09090909 0.09090909 0.09090909
 0.09090909 0.09090909 0.09090909 0.09090909 0.09090909 0.09090909
 0.09090909 0.09090909 0.09090909 0.09090909 0.09090909 0.09090909
 0.09090909 0.09090909 0.09090909 0.09090909 0.09090909 0.09090909
 0.09090909 0.09090909 0.09090909 0.09090909 0.09090909 0.09090909
 0.09090909 0.09090909 0.09090909 0.09090909]
UDR variates Single Dice:  [1 3 1 1 6 5 3 6 2 6 5 3 6 4 2 1 1 1 2 3 5 4 2 6 2 6 5 4 4 2 5 3 3 4 5 6 6
 6 1 5 2 1 5 3 5 2 3 4 1 4 6 2 2 6 3 2 3 1 6 5 2 1 2 6 5 6 4 5 4 6 2 2 6 5
 1 3 6 6 3 3 3 1 3 1 1 3 5 5 2 1 3 1 6 3 2 3 3 6 3 4]
PD Single Dice:  [0.16666667 0.16666667 0.16666667 0.16666667 0.16666667 0.16666667
 0.16666667 0.16666667 0.16666667 0.16666667 0.16666667 0.16666667
 0.16666667 0.16666667 0.16666667 0.16666667 0.16666667 0.16666667
 0.16666667 0.16666667 0.16666667 0.16666667 0.16666667 0.16666667
 0.16666667 0.16666667 0.16666667 0.16666667 0.16666667 0.16666667
 0.16666667 0.16666667 0.16666667 0.16666667 0.16666667 0.16666667
 0.16666667 0.16666667 0.16666667 0.16666667 0.16666667 0.16666667
 0.16666667 0.16666667 0.16666667 0.16666667 0.16666667 0.16666667
 0.16666667 0.16666667 0.16666667 0.16666667 0.16666667 0.16666667
 0.16666667 0.16666667 0.16666667 0.16666667 0.16666667 0.16666667
 0.16666667 0.16666667 0.16666667 0.16666667 0.16666667 0.16666667
 0.16666667 0.16666667 0.16666667 0.16666667 0.16666667 0.16666667
 0.16666667 0.16666667 0.16666667 0.16666667 0.16666667 0.16666667
 0.16666667 0.16666667 0.16666667 0.16666667 0.16666667 0.16666667
 0.16666667 0.16666667 0.16666667 0.16666667 0.16666667 0.16666667
 0.16666667 0.16666667 0.16666667 0.16666667 0.16666667 0.16666667
 0.16666667 0.16666667 0.16666667 0.16666667]

结论

本文即将结束,我们尝试使用 Python 对离散均匀分布(统计学中广泛使用的一个基本概念)进行了可视化。它定义了等可能结果的情况。Python 中 scipy.stats 模块和 randint() 方法形式的功能强大的工具帮助我们在统计学上建立对离散均匀数据的理解和实现。

通过理解其参数并使用正确的格式,我们可以轻松地创建、生成和可视化离散均匀分布。无论是模拟公平的掷骰子、生成随机结果还是处理现实世界的数据,离散均匀分布在统计学领域(包括概率论、金融和计算机科学)都是一个宝贵且通用的工具。

更新于:2023年11月2日

329 次浏览

启动你的 职业生涯

通过完成课程获得认证

开始学习
广告