• Python生成正态分布的随机数


    Numpy的五种标准随机分布:正态学生柯西指数伽马

    正态分布

    正态分布,最早由棣莫弗在二项分布的渐近公式中得到,而真正奠定正态分布地位的,却是高斯对测量误差的研究。测量是人类与自然界交互中必不可少的环节,测量误差的普遍性,确立了正态分布作用范围的广泛性,或许正因如此,正态分布才又被称为Gauss分布。

    np.random中提供了高斯分布、对数高斯分布、标准高斯分布以及逆高斯分布的一元随机数生成器,此外还有多元正态分布生成器。

    其中,正态分布、对数正态分布以及逆高斯分布的概率密度函数如下表

    normal([loc, scale]) 1 2 π σ 2 exp ⁡ [ − ( x − μ ) 2 2 σ 2 ] \frac{1}{\sqrt{2\pi\sigma^2}}\exp[-\frac{(x-\mu)^2}{2\sigma^2}] 2πσ2 1exp[2σ2(xμ)2]正态分布
    lognormal([mean, sigma]) 1 σ x 2 π e − ( ln ⁡ ( x ) − x ) 2 2 σ 2 \frac{1}{\sigma x\sqrt{2\pi}}e^{-\frac{(\ln(x)-x)^2}{2\sigma^2}} σx2π 1e2σ2(ln(x)x)2对数正态分布
    wald(mean, scale) λ 2 π x 3 exp ⁡ [ − λ ( x − μ ) 2 2 μ 2 x ] \sqrt{\frac{\lambda}{2\pi x^3}}\exp[-\frac{\lambda(x-\mu)^2}{2\mu^2x}] 2πx3λ exp[2μ2xλ(xμ)2]逆高斯分布

    逆高斯分布的说法容易引发歧义,实际上,逆高斯分布和高斯分布相当于布朗运动研究中的两个视角。在布朗运动中,高斯分布描述的是某一固定时刻距离的分布;而逆高斯分布则是达到固定距离所需时间的分布。

    从分布的形式来看,当 λ \lambda λ趋近于无穷大时,逆高斯分布趋向于高斯分布。

    特别地,当 μ = λ = 1 \mu=\lambda=1 μ=λ=1时,逆高斯分布又被称为Wald分布,其概率密度函数表达式为

    p ( x ) = 1 2 π x 3 exp ⁡ [ − ( x − 1 ) 2 2 x ] p(x)=\sqrt{\frac{1}{2\pi x^3}}\exp[-\frac{(x-1)^2}{2x}] p(x)=2πx31 exp[2x(x1)2]

    Python生成高斯分布和逆高斯分布

    接下来绘制一下高斯分布和逆高斯分布。

    import numpy as np
    import matplotlib.pyplot as plt
    labels = ["Gaussian distribution",
    "Inverse Gaussian distribution"]
    dists = [np.random.normal,
    np.random.wald]
    fig = plt.figure()
    for i in range(2):
        ax = fig.add_subplot(1,2,i+1)
        xs = dists[i](2,1,size=1000)
        ax.set_title(labels[i])
        plt.hist(xs,100)
    
    plt.show()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    效果如下

    在这里插入图片描述

    Python生成多元Gauss分布

    多元高斯分布的主要参数仍为期望和方差,但所谓多元分布,在坐标层面的表现就是坐标轴的个数,也就是向量维度。所以N个元素对应N维向量,也就有N个期望;而方差则进化为了协方差矩阵,下面可以画个图演示一下

    mean = [0, 0]
    cov = [[0, 1], [10, 0]]
    x, y = np.random.multivariate_normal(mean, cov, 5000).T
    
    def scatter_hist(x, y, ax_histx, ax_histy):
        ax_histx.tick_params(axis="x", labelbottom=False)
        ax_histy.tick_params(axis="y", labelleft=False)
        binwidth = 0.25
        xymax = max(np.max(np.abs(x)), np.max(np.abs(y)))
        lim = (int(xymax/0.25) + 1) * 0.25
        bins = np.arange(-lim, lim + binwidth, binwidth)
        ax_histx.hist(x, bins=bins)
        ax_histy.hist(y, bins=bins, orientation='horizontal')
    
    fig = plt.figure()
    gs = fig.add_gridspec(2, 2,  
        width_ratios=(4, 1),  
        height_ratios=(1, 4))
    
    ax = fig.add_subplot(gs[1, 0])
    ax.scatter(x, y, marker='x')
    
    ax_histx = fig.add_subplot(gs[0, 0], sharex=ax)
    ax_histy = fig.add_subplot(gs[1, 1], sharey=ax)
    scatter_hist(x, y, ax_histx, ax_histy)
    plt.show()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    效果如下

    在这里插入图片描述

  • 相关阅读:
    Mysql8创建用户以及赋权操作
    【CSS】笔试题精讲
    个人信用风险评估项目
    PY32F003F18之定时器中断
    坚持三月,刷完了阿里P8技术官整理的这3份1000道Java高频面试题笔记,成功上岸阿里P7职位
    一百七十、Linux——Crontab定时任务调度Kettle脚本
    iOS开发UITableView的使用,区别Plain模式和Grouped模式
    FreeRTOS中PendSV和SysTick的中断优先级和SVC系统调用
    Ansible最佳实践之 AWX 作业创建和启动
    音乐管理系统
  • 原文地址:https://blog.csdn.net/m0_37816922/article/details/128051178