第三章 概率统计基础代码练习

3. 1 概率论

3.1.3 离散随机变量分布Python实验

1. 伯努利分布

1) 什么是伯努利分布

伯努利分布是概率论和统计学中的一种离散型概率分布,通常用于描述只有两种可能结果的随机试验,如正面或反面、成功或失败等。它以参数( p )表示成功的概率,记作( \text{Ber}§ )或( \text{Bernoulli}§ )。

伯努利分布的特点包括:

  1. 只有两个可能结果:例如,投掷一枚硬币只能出现正面(成功)或反面(失败)。
  2. 离散型分布:结果是离散的,只能取0或1,其中0代表失败,1代表成功。
  3. 单个参数:用( p )表示成功的概率,失败的概率则为( 1 - p )。
  4. 公式:伯努利分布的概率质量函数(PMF)为:
    f ( x ) = { p , if  x = 1 1 − p , if  x = 0 f(x) = \begin{cases} p, & \text{if } x = 1 \\ 1 - p, & \text{if } x = 0 \end{cases} f(x)={p,1p,if x=1if x=0
    其中, x x x为随机变量的取值。
    伯努利分布常见的应用包括模拟二项分布的单次试验、描述二元随机变量的分布、在机器学习中用于表示二元分类任务的输出等。
2) 可视化伯努利分布的概率质量函数(PMF) 代码
import numpy as np
# 从SciPy库中导入stats模块,该模块包含了概率论及统计相关的函数。
from scipy import stats
# 绘图
import matplotlib.pyplot as plt 

# pmd 概率质量分布函数 probability mass function
def bernoulli_pmf(p=0.0):
    # 创建了一个伯努利分布对象,其概率参数为p。
    ber_list = stats.bernoulli(p)
    print(ber_list)  # <scipy.stats._distn_infrastructure.rv_discrete_frozen object at 0x0000026F279E6640>
    # x定义了用于绘制PMF图的x轴数值,表示伯努利分布可能的结果(0和1)
    x = [0, 1] 
    x_name = ['0', '1'] # x轴刻度的标签,对应着结果0和1。
    # 使用伯努利分布对象的pmf方法计算了结果0和1的PMF值。
    pmf = [ber_list.pmf(x[0]), ber_list.pmf(x[1])]
    # 使用Matplotlib bar创建了一个柱状图,其中x是x轴数值,pmf是PMF值,width=0.15设置了柱状图的宽度
    plt.bar(x, pmf, width=0.15)
    plt.xticks(x, x_name)  # 设置了x轴刻度为指定的值(['0', '1'])
    plt.ylabel("Probability")  # 添加了y轴标签
    plt.title('PMF of bernoulli distribution')  # 添加了图表的标题 默认在图表上面--中间位置
    plt.show() # 显示绘制的图表。

bernoulli_pmf(0.3) # 可视化概率成功【值为1】为0.3的伯努利分布的PMF。

在这里插入图片描述

2. 二项分布

1)什么是二项分布

二项分布是描述了在一系列相互独立的二元试验中成功次数的概率分布。这种分布在概率论和统计学中非常常见,特别是在描述二元随机事件的情况下。

具体来说,二项分布的参数包括试验的次数(n)和成功的概率(p)。在一次试验中,成功的概率为 p,失败的概率则为 1 - p。如果进行了 n 次独立的二元试验,那么二项分布可以告诉我们在这些试验中成功次数的概率分布情况。

例如,如果我们进行了 10 次硬币抛掷试验,每次抛掷硬币出现正面的概率是 0.5(即成功概率为 0.5),那么在这个场景下,我们可以使用二项分布来计算在这 10 次试验中出现 0、1、2、3、…、10 次正面的概率分布情况。

二项分布的概率质量函数(PMF)给出了每个可能的成功次数的概率,而累积分布函数(CDF)则给出了成功次数小于或等于某个特定值的概率。这些函数在统计学和数据分析中经常用于描述和分析随机试验和事件的结果。
二项分布的概率质量函数(PMF)公式如下:

P ( X = k ) = ( n k ) ⋅ p k ⋅ ( 1 − p ) n − k P(X=k) = \binom{n}{k} \cdot p^k \cdot (1-p)^{n-k} P(X=k)=(kn)pk(1p)nk

其中, n n n 是试验的次数, k k k 是成功的次数, p p p 是成功的概率, ( 1 − p ) (1-p) (1p)是失败的概率, ( n k ) \binom{n}{k} (kn)是组合数,表示从 n n n次试验中选取 k k k次成功的组合数。

累积分布函数(CDF)表示成功次数小于或等于某个特定值的概率,计算公式为:

F ( X ≤ k ) = ∑ i = 0 k ( n i ) ⋅ p i ⋅ ( 1 − p ) n − i F(X \leq k) = \sum_{i=0}^{k} \binom{n}{i} \cdot p^i \cdot (1-p)^{n-i} F(Xk)=i=0k(in)pi(1p)ni

这些公式可以用来计算二项分布的概率分布和累积分布情况。

2)可视化二项分布的概率质量函数(PMF) 代码
import numpy as np
from scipy import stats
import matplotlib.pyplot as plt

# 试验次数n和每次试验成功的概率p
def binom_dis(n=1, p=0.1):
	# 创建了一个二项分布对象 binom_dis,使用了 stats.binom 函数,传入了试验次数 n 和成功概率 p
    binom_dis = stats.binom(n, p)
    # 生成了一组 x 值,范围是从 binom_dis.ppf(0.0001) 到 binom_dis.ppf(0.999),这些值将作为 x 轴的数据点。
    x = np.arange(binom_dis.ppf(0.0001), binom_dis.ppf(0.999))
    print(x)  # [ 4.  5.  6.  7.  8.  9. 10. 11. 12. 13. 14. 15. 16. 17.]
    # 创建了一个图形窗口和一个坐标轴对象,用于绘制图形。
    fig, ax = plt.subplots(1, 1)
    # 使用蓝色圆点绘制了二项分布的概率质量函数曲线,x 轴是试验次数,y 轴是对应的概率质量值。
    ax.plot(x, binom_dis.pmf(x), "bo", label="binom pmf")
    # 绘制了垂直于 x 轴的直线,表示每个试验次数对应的概率质量值
    ax.vlines(x, 0, binom_dis.pmf(x), colors="b", lw=5, alpha=0.5)
    # 添加了图例、标签和标题,并显示了二项分布的概率质量函数图
    ax.legend(loc="best", frameon=False)
    plt.ylabel('probability')
    plt.title("PMF of binomial distributoin(b={}, p={})".format(n, p))
    plt.show()

binom_dis(n=20, p=0.6)
[ 4.  5.  6.  7.  8.  9. 10. 11. 12. 13. 14. 15. 16. 17.]

在这里插入图片描述

binom_dis.ppf(0.0001) 是在二项分布中累积概率为 0.0001 对应的试验次数,而 binom_dis.ppf(0.999) 则是累积概率为 0.999 对应的试验次数。 这两个值的作用是确定绘制二项分布的概率质量函数图时 x 轴的范围,即确定试验次数的取值范围,使得图形能够较好地展示出二项分布的特征。

ax.plot(x, binom_dis.pmf(x), “bo”, label=“binom pmf”)这行代码是用来绘制二项分布的概率质量函数(PMF)图的。

  • x 是试验次数的取值范围,通过 np.arange(binom_dis.ppf(0.0001), binom_dis.ppf(0.999)) 生成。这个范围是根据二项分布的累积概率分布函数来确定的,保证了在这个范围内能够较好地展示二项分布的特征。

  • binom_dis.pmf(x) 计算了在给定试验次数下每个试验次数的概率质量函数值。这里的 binom_dis 是二项分布对象,pmf 是概率质量函数的意思,x 是试验次数的取值范围。

  • "bo" 是指定绘制散点图的样式,其中 “b” 表示蓝色(blue),“o” 表示圆点(circle)。

  • label="binom pmf" 是为图例添加标签,方便在图中显示出相应的信息,这里标记为 “binom pmf”,表示二项分布的概率质量函数。

这行代码的作用是在图中用蓝色圆点标出二项分布的概率质量函数的值,并且在图例中添加了相应的标签以便于识别。

ax.vlines(x, 0, binom_dis.pmf(x), colors=“b”, lw=5, alpha=0.5)这行代码是用来绘制二项分布的概率质量函数的垂直线图。

  • x 是试验次数的取值范围,是一个数组,表示在这些取值上绘制垂直线。

  • 0 是垂直线的起始高度,即从 y 轴的 0 点开始绘制垂直线。

  • binom_dis.pmf(x) 计算了在给定试验次数下每个试验次数的概率质量函数值。这里的 binom_dis 是二项分布对象,pmf 是概率质量函数的意思,x 是试验次数的取值范围。

  • colors="b" 指定垂直线的颜色为蓝色(blue)。

  • lw=5 设置垂直线的宽度为 5 个单位。

  • alpha=0.5 设置垂直线的透明度为 0.5,使得线条半透明。

这行代码的作用是在图中用蓝色垂直线标出二项分布的概率质量函数的值,展示了每个试验次数的概率密度。

3. 泊松分布

1)什么是泊松分布

泊松分布是一种用于描述单位时间(或单位空间)内随机事件发生次数的概率分布。它通常用λ表示事件发生的平均速率(单位时间内平均发生的次数),在泊松分布中,事件发生的间隔时间是独立且服从指数分布的。

泊松分布的概率质量函数(PMF)公式为:

P ( X = k ) = e − λ λ k k ! P(X=k) = \frac{{e^{-\lambda} \lambda^k}}{{k!}} P(X=k)=k!eλλk

其中, k k k 表示事件发生的次数, λ \lambda λ 表示事件发生的平均速率, e e e 是自然对数的底(约等于2.71828), k ! k! k!表示 k k k的阶乘。

在泊松分布中,事件发生的次数可以是0、1、2、3……无穷大,但是事件发生次数为负数的概率为0。

2)可视化泊松分布的概率质量函数(PMF) 代码
import numpy as np
from scipy import stats
import matplotlib.pyplot as plt
def poisson_pmf(mu=3):
	# 使用 SciPy 中的泊松分布函数 stats.poisson 创建一个泊松分布对象,参数为 mu。
    poisson_pmf = stats.poisson(mu)
    # 生成一个包含泊松分布可能取值的数组 x,范围从 0.001 分位点到 0.999 分位点之间。
    x = np.arange(poisson_pmf.ppf(0.001), poisson_pmf.ppf(0.999))
    print(x)
    fig, ax = plt.subplots(1, 1)
    # 在子图上绘制泊松分布的概率质量函数图像,使用蓝色圆点标记,并设置标记大小为 8,标签为 'poisson pmf'。
    ax.plot(x, poisson_pmf.pmf(x), 'bo', ms=8, label='poisson pmf')
    ax.vlines(x, 0, poisson_pmf.pmf(x), colors='b', lw=5, alpha=0.5)
    ax.legend(loc='best', frameon=False)
    plt.ylabel('Probability')
    plt.title("PMF of poisson distribution(mu={})".format(mu))
    plt.show()

poisson_pmf(mu=8)
[ 1.  2.  3.  4.  5.  6.  7.  8.  9. 10. 11. 12. 13. 14. 15. 16. 17.]

在这里插入图片描述

poisson_pmf.ppf(q) 是 SciPy 中泊松分布对象的一个方法,用于计算给定累积概率的分位点(即百分位)。具体来说:

  • q 是一个概率值,范围在 0 到 1 之间,表示累积概率的分位点。例如,q=0.001 表示要计算累积概率为 0.001 的分位点。

  • poisson_pmf.ppf(q) 返回的是泊松分布中累积概率为 q 对应的分位点,这个分位点对应的是泊松分布的可能取值。

在这段代码中,poisson_pmf.ppf(0.001)poisson_pmf.ppf(0.999) 分别计算了泊松分布中累积概率为 0.001 和 0.999 对应的分位点,用于确定绘制泊松分布概率质量函数图像时取值范围的起始和结束位置。

3.1.4 连续随机变量分布Python实验

1. 均匀分布

1) 什么是均匀分布

均匀分布是概率论和统计学中的一种基本分布形式,通常用于描述随机变量在一个区间内的取值情况。均匀分布的特点是在给定的区间内,每个数值点出现的概率是相同的,即各个数值点的概率密度函数是常数。这种分布在统计模型和随机模拟中经常被使用。

对于一个均匀分布 U ( a , b ) U(a, b) U(a,b),其中 a a a b b b 分别是区间的上下界,概率密度函数 f ( x ) f(x) f(x) 表示为:

f ( x ) = { 1 b − a 当 a ≤ x ≤ b 0 其他情况 f(x) = \begin{cases} \frac{1}{b - a} & \text{当} a \leq x \leq b \\ 0 & \text{其他情况} \end{cases} f(x)={ba10axb其他情况

均匀分布的期望值为 a + b 2 \frac{a + b}{2} 2a+b,方差为 ( b − a ) 2 12 \frac{(b - a)^2}{12} 12(ba)2。在均匀分布中,任意两个不相交的区间上的概率是相等的,这是其最显著的特征之一。

2) 可视化均匀分布的概率密度函数代码
import numpy as np
from scipy import stats
import matplotlib.pyplot as plt
# 使用 Python 中的 SciPy 和 Matplotlib 库生成均匀分布的概率密度函数(PDF)图表和随机抽样直方图
def uniform_distribution(loc=0, scale=1):
	# 创建一个冻结的均匀分布对象,指定了分布的位置参数 loc 和尺度参数 scale。
    uniform_dis = stats.uniform(loc=loc, scale=scale)
    #  生成一个包含 100 个元素的等间距数组,用于绘制 PDF 图表 ppf 是累积分布函数的逆运算,用于计算给定概率值对应的分位点。
    x = np.linspace(uniform_dis.ppf(0.01), uniform_dis.ppf(0.99), 100)
    print(x, len(x))
    fig, ax = plt.subplots(1, 1)

    # 直接传入参数
    ax.plot(x, stats.uniform.pdf(x, loc=2, scale=4), 'r-', lw=5, alpha=0.6, label='uniform pdf')
    # 从冻结的均匀分布取值
    ax.plot(x, uniform_dis.pdf(x), 'k-', lw=2, label='frozon pdf')
    # 计算ppf分别等于0.001, 0.5和0.999时的x值
    # 计算分布函数的分位点,即在累积分布函数 (CDF) 中给定概率值时的取值
    vals = uniform_dis.ppf([0.001, 0.5, 0.999])
    print(vals)  # [2.004 4.    5.996] 
    # 检测cdf和ppf的精确度
    print(np.allclose([0.001, 0.5, 0.999], uniform_dis.cdf(vals)))  # True
	
	# 生成 1000 个服从均匀分布的随机样本
    r = uniform_dis.rvs(size=1000)
    # 最新版本matplotlib将normed参数移除,修改为density参数即可
    ax.hist(r, density=True, histtype='stepfilled', alpha=0.2)
    plt.ylabel("probability")
    plt.title(r"PDF of Unif({}, {})".format(loc, loc+scale))
    ax.legend(loc='best', frameon=False)
    plt.show()

uniform_distribution(loc=2, scale=4)
[2.04       2.07959596 2.11919192 2.15878788 2.19838384 2.2379798
 2.27757576 2.31717172 2.35676768 2.39636364 2.4359596  2.47555556
 2.51515152 2.55474747 2.59434343 2.63393939 2.67353535 2.71313131
 2.75272727 2.79232323 2.83191919 2.87151515 2.91111111 2.95070707
 2.99030303 3.02989899 3.06949495 3.10909091 3.14868687 3.18828283
 3.22787879 3.26747475 3.30707071 3.34666667 3.38626263 3.42585859
 3.46545455 3.50505051 3.54464646 3.58424242 3.62383838 3.66343434
 3.7030303  3.74262626 3.78222222 3.82181818 3.86141414 3.9010101
 3.94060606 3.98020202 4.01979798 4.05939394 4.0989899  4.13858586
 4.17818182 4.21777778 4.25737374 4.2969697  4.33656566 4.37616162
 4.41575758 4.45535354 4.49494949 4.53454545 4.57414141 4.61373737
 4.65333333 4.69292929 4.73252525 4.77212121 4.81171717 4.85131313
 4.89090909 4.93050505 4.97010101 5.00969697 5.04929293 5.08888889
 5.12848485 5.16808081 5.20767677 5.24727273 5.28686869 5.32646465
 5.36606061 5.40565657 5.44525253 5.48484848 5.52444444 5.5640404
 5.60363636 5.64323232 5.68282828 5.72242424 5.7620202  5.80161616
 5.84121212 5.88080808 5.92040404 5.96      ] 100
[2.004 4.    5.996]
True

在这里插入图片描述

这里是对每个参数的具体含义解释:

  1. ax.plot(x, stats.uniform.pdf(x, loc=2, scale=4), 'r-', lw=5, alpha=0.6, label='uniform pdf')

    • x: 横坐标,表示随机变量的取值范围。
    • stats.uniform.pdf(x, loc=2, scale=4): 使用 SciPy 中的 pdf 函数计算均匀分布在给定取值范围内的概率密度值。
    • loc=2: 均匀分布的位置参数,指定分布的起始位置。
    • scale=4: 均匀分布的尺度参数,指定分布的范围。
    • 'r-': 绘制红色实线。
    • lw=5: 线宽度为 5。
    • alpha=0.6: 绘图元素的透明度为 0.6。
    • label='uniform pdf': 图例标签,用于标识图中的线条。
  2. ax.plot(x, uniform_dis.pdf(x), 'k-', lw=2, label='frozen pdf')

    • uniform_dis.pdf(x): 使用冻结的均匀分布对象计算均匀分布在给定取值范围内的概率密度值。
    • 'k-': 绘制黑色实线。
    • lw=2: 线宽度为 2。
    • label='frozen pdf': 图例标签,用于标识图中的线条。
  3. ax.hist(r, density=True, histtype='stepfilled', alpha=0.2)

    • r: 随机抽样生成的样本数据。
    • density=True: 绘制的是概率密度直方图,即直方图的面积表示概率。
    • histtype='stepfilled': 绘制填充的直方图,每个直方柱之间有填充色。
    • alpha=0.2: 直方图的透明度为 0.2,表示较低的填充颜色透明度。
    • stepfilled 是直方图的填充类型,它使用填充色将直方图的每个柱子之间进行填充,使得直方图看起来更加连续和平滑。填充色通常是由当前绘图环境或样式设置决定的,可以是各种颜色。在 matplotlib 中,默认的填充颜色可能是蓝色、红色、绿色等,具体取决于当前的绘图风格和设置。

2. 指数分布

1) 什么是指数分布

指数分布是描述事件发生间隔时间的概率分布,特别是用于描述连续时间下事件发生的时间间隔。它通常用于模拟随机事件的间隔时间,比如等待下一次电话呼叫或地震之间的时间间隔等。

指数分布的概率密度函数为:

f ( x ; λ ) = λ e − λ x f(x; \lambda) = \lambda e^{-\lambda x} f(x;λ)=λeλx

其中, x ≥ 0 x \geq 0 x0 为时间间隔, λ > 0 \lambda > 0 λ>0是指数分布的一个参数,称为速率参数,表示单位时间内事件发生的平均次数。指数分布的期望值 E ( X ) E(X) E(X) 1 λ \frac{1}{\lambda} λ1,方差 V a r ( X ) Var(X) Var(X) 为 $\frac{1}{\lambda^2} $.

在实际应用中,指数分布常用于模拟随机事件的时间间隔,比如服务台接到一个电话的时间间隔,或者设备的寿命等。

2) 可视化指数分布的概率密度函数代码
import numpy as np
from scipy import stats
import matplotlib.pyplot as plt

def exponential_dis(loc=0, scale=1.0):
    """
    指数分布,exponential continuous random variable
    按照定义,指数分布只有一个参数lambda, 这里的scale=1/lambda
    :param loc: 定义域的左端点, 相当于将整体分布沿X轴平移loc
    :param scale: lambda的倒数,loc+scale表示该分布的均值,scale^2表示该分布的方差
    :return:
    """
    exp_dis = stats.expon(loc=loc, scale=scale)
    x = np.linspace(exp_dis.ppf(0.000001), exp_dis.ppf(0.999999), 100)
    print(x)
    fig, ax = plt.subplots(1, 1)
    # 直接传入参数
    ax.plot(x, stats.expon.pdf(x, loc=loc, scale=scale), 'r-', lw=5, alpha=0.5, label="uniform pdf")
    # 从冻结的均匀分布取值
    ax.plot(x, exp_dis.pdf(x), 'k-', lw=2, label='frozen pdf')
    # 计算ppf分别等于0.001 0.5 0.999时x的值
    vals = exp_dis.ppf([0.001, 0.5, 0.999])
    print(vals)
    # 检测cdf和ppf的精度
    print(np.allclose([0.001, 0.5, 0.999], exp_dis.cdf(vals)))

    r = exp_dis.rvs(size=1000)
    ax.hist(r, density=True, histtype="stepfilled", alpha=0.2)
    plt.ylabel('Probability')
    plt.title(r'PDF of EXP(0.5)')
    ax.legend(loc='best', frameon=False)
    plt.show()

exponential_dis(loc=0, scale=2)
C:\Users\linlin.di\.conda\envs\pytorch\python.exe C:/工作文档/learn_pytorch/book_unit2.py
[2.00000100e-06 2.79103203e-01 5.58204406e-01 8.37305610e-01
 1.11640681e+00 1.39550802e+00 1.67460922e+00 1.95371042e+00
 2.23281163e+00 2.51191283e+00 2.79101403e+00 3.07011524e+00
 3.34921644e+00 3.62831764e+00 3.90741884e+00 4.18652005e+00
 4.46562125e+00 4.74472245e+00 5.02382366e+00 5.30292486e+00
 5.58202606e+00 5.86112727e+00 6.14022847e+00 6.41932967e+00
 6.69843088e+00 6.97753208e+00 7.25663328e+00 7.53573449e+00
 7.81483569e+00 8.09393689e+00 8.37303810e+00 8.65213930e+00
 8.93124050e+00 9.21034171e+00 9.48944291e+00 9.76854411e+00
 1.00476453e+01 1.03267465e+01 1.06058477e+01 1.08849489e+01
 1.11640501e+01 1.14431513e+01 1.17222525e+01 1.20013537e+01
 1.22804549e+01 1.25595561e+01 1.28386573e+01 1.31177585e+01
 1.33968598e+01 1.36759610e+01 1.39550622e+01 1.42341634e+01
 1.45132646e+01 1.47923658e+01 1.50714670e+01 1.53505682e+01
 1.56296694e+01 1.59087706e+01 1.61878718e+01 1.64669730e+01
 1.67460742e+01 1.70251754e+01 1.73042766e+01 1.75833778e+01
 1.78624790e+01 1.81415802e+01 1.84206814e+01 1.86997826e+01
 1.89788838e+01 1.92579850e+01 1.95370862e+01 1.98161874e+01
 2.00952886e+01 2.03743898e+01 2.06534910e+01 2.09325922e+01
 2.12116934e+01 2.14907946e+01 2.17698958e+01 2.20489971e+01
 2.23280983e+01 2.26071995e+01 2.28863007e+01 2.31654019e+01
 2.34445031e+01 2.37236043e+01 2.40027055e+01 2.42818067e+01
 2.45609079e+01 2.48400091e+01 2.51191103e+01 2.53982115e+01
 2.56773127e+01 2.59564139e+01 2.62355151e+01 2.65146163e+01
 2.67937175e+01 2.70728187e+01 2.73519199e+01 2.76310211e+01]
[2.00100067e-03 1.38629436e+00 1.38155106e+01]
True

在这里插入图片描述

3. 正太分布

1) 什么是正太分布

正态分布,也称为高斯分布,是统计学中最重要的连续概率分布之一,常用于自然界和社会科学中各种现象的建模,例如测量误差、测试成绩、身高、体重等。它以钟形曲线图形示,由两个参数完全描述:均值 ( \mu ) 和标准差 ( \sigma )。

正态分布的概率密度函数为:

f ( x ; μ , σ ) = 1 2 π σ e − ( x − μ ) 2 2 σ 2 f(x; \mu, \sigma) = \frac{1}{\sqrt{2\pi}\sigma} e^{-\frac{(x-\mu)^2}{2\sigma^2}} f(x;μ,σ)=2π σ1e2σ2(xμ)2

其中, x x x表示随机变量, μ \mu μ 是均值, σ \sigma σ是标准差。这个函数在 x = μ x = \mu x=μ 处取得最大值,对称于均值,标准差决定了曲线的形状,越大曲线越矮胖,越小曲线越高瘦。

正态分布具有很多重要性质,比如68-95-99.7法则,即在一个正态分布中,大约68%的数据落在均值的一个标准差范围内,约95%的数据落在两个标准差范围内,约99.7%的数据落在三个标准差范围内。这使得正态分布在统计学和数据分析中广泛应用。

2) 可视化正太分布的概率密度函数代码
import numpy as np
from scipy import stats
import matplotlib.pyplot as plt
import math

u = 0  # 均值
u01 = -2
sig = math.sqrt(0.2)  # 标准差
x = np.linspace(u-3*sig, u+3*sig, 50)
y_sig = np.exp(-(x-u)**2/(2*sig**2))/(math.sqrt(2*math.pi)*sig)
print(x)
print("="*20)
print(y_sig)
plt.plot(x, y_sig, 'r-', linewidth=2)
plt.grid(True)
plt.show()
[-1.34164079 -1.28687994 -1.23211909 -1.17735824 -1.12259739 -1.06783654
 -1.0130757  -0.95831485 -0.903554   -0.84879315 -0.7940323  -0.73927145
 -0.68451061 -0.62974976 -0.57498891 -0.52022806 -0.46546721 -0.41070636
 -0.35594551 -0.30118467 -0.24642382 -0.19166297 -0.13690212 -0.08214127
 -0.02738042  0.02738042  0.08214127  0.13690212  0.19166297  0.24642382
  0.30118467  0.35594551  0.41070636  0.46546721  0.52022806  0.57498891
  0.62974976  0.68451061  0.73927145  0.7940323   0.84879315  0.903554
  0.95831485  1.0130757   1.06783654  1.12259739  1.17735824  1.23211909
  1.28687994  1.34164079]
====================
[0.00990991 0.01420204 0.02005026 0.02788544 0.03820527 0.05156528
 0.06856141 0.08980291 0.1158749  0.14729114 0.18443876 0.22751815
 0.27648285 0.33098525 0.3903349  0.45347612 0.51899092 0.58513138
 0.64988322 0.71105885 0.76641512 0.81378725 0.85122818 0.87714098
 0.8903917  0.8903917  0.87714098 0.85122818 0.81378725 0.76641512
 0.71105885 0.64988322 0.58513138 0.51899092 0.45347612 0.3903349
 0.33098525 0.27648285 0.22751815 0.18443876 0.14729114 0.1158749
 0.08980291 0.06856141 0.05156528 0.03820527 0.02788544 0.02005026
 0.01420204 0.00990991]

在这里插入图片描述
这段代码演示了如何使用 Python 绘制正态分布的概率密度函数图像。让我逐行解释一下:

  1. u = 0 # 均值:设置正态分布的均值为 0。
  2. u01 = -2:这是一个额外的变量,值为 -2。
  3. sig = math.sqrt(0.2) # 标准差:计算标准差,这里使用了 math.sqrt() 函数求平方根,标准差为 0.2 \sqrt{0.2} 0.2
  4. x = np.linspace(u-3*sig, u+3*sig, 50):生成 50 个在区间 [ u − 3 σ , u + 3 σ ] [u-3\sigma, u+3\sigma] [u3σ,u+3σ]内均匀分布的数值,这里用于构建 x 轴的取值范围。
  5. y_sig = np.exp(-(x-u)**2/(2*sig**2))/(math.sqrt(2*math.pi)*sig):计算每个 x 对应的正态分布概率密度函数值,这里使用了正态分布的公式 f ( x ; μ , σ ) = 1 2 π σ e − ( x − μ ) 2 2 σ 2 f(x; \mu, \sigma) = \frac{1}{\sqrt{2\pi}\sigma} e^{-\frac{(x-\mu)^2}{2\sigma^2}} f(x;μ,σ)=2π σ1e2σ2(xμ)2
  6. print(x)print(y_sig):打印生成的 x 和对应的 y 值。
  7. plt.plot(x, y_sig, 'r-', linewidth=2):使用 Matplotlib 绘制曲线图,红色实线,线宽为 2。
  8. plt.grid(True):显示网格线。
  9. plt.show():显示图形。

这段代码实际上生成了一个以均值为 0、标准差为 0.2 \sqrt{0.2} 0.2 的正态分布的概率密度函数图像,并通过 Matplotlib 进行了可视化展示。

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值