一、最基本用法示例
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()
运行结果如下图所示:<左边是自定义分布,右边是随机采样后的柱状图>
网友评论