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