python PDF到画直方图

作者: 西方失败9527 | 来源:发表于2017-09-11 14:28 被阅读0次

    一、最基本用法示例


    import numpy as np

    import matplotlib.pyplot as plt

    # example data

    mu=100# mean of distribution 分布的均值或者期望

    sigma=15# standard deviation of distribution 分布的标准差

    x=mu+sigma*np.random.randn(50000)#生成50000个所给期望和标准差的正态分布样本点

    num_bins=500#将上行所生成的50000个样本数据分为num_bins个柱状统计

    # the histogram of the data

    n,bins,patches=plt.hist(x,num_bins,normed=1,facecolor='blue',alpha=0.5)

    plt.show()

    运行结果如下图:


    二、生成自定义分布的柱状图

    import numpy

    from matplotlib import pyplot

    # Define a PDF 定义概率密度函数

    x_samples = numpy.arange(-3,3.01,0.01)#生成-3到3之间,跨度为0.01的等差数据点

    PDF = numpy.empty(x_samples.shape)#生成和x_samples变量一样规模的PDF变量

    #round函数返回离参数最近的正负整数

    #下面一行代码将x_samples中小于零的部分经过运算使其成为阶跃函数

    PDF[x_samples<0] = numpy.round(x_samples[x_samples<0]+3.5)/3

    #大于零部分用余弦函数表示,乘以pi可将其周期变小为2pi/pi=2,半边三个单位可表示余弦的一个半周期

    PDF[x_samples>=0] = 0.5*numpy.cos(numpy.pi*x_samples[x_samples>=0])+0.5


    PDF  /= numpy.sum(PDF)#正则化

    # Calculate approximated CDF 计算近似的累积分布函数

    CDF=numpy.empty(PDF.shape)

    cumulated=0

    for i in range(CDF.shape[0]):

          cumulated += PDF[i]

          CDF[i] = cumulated#离散型累积分布函数CDF求法

    u_rv = numpy.random.random(10000)#生成均匀分布的10000个随机点数组

    x = numpy.interp(u_rv,xp=CDF,fp=x_samples)

    # Visualization

    fig,(ax0,ax1) = pyplot.subplots(ncols=2,figsize=(9,4))

    ax0.plot(x_samples,PDF)

    ax0.axis([-3.5,3.5,0,numpy.max(PDF)*1.1])

    ax1.hist(x,100)

    pyplot.show()

    运行结果如下图所示:<左边是自定义分布,右边是随机采样后的柱状图>

    相关文章

      网友评论

        本文标题:python PDF到画直方图

        本文链接:https://www.haomeiwen.com/subject/tnqfsxtx.html