如何生成满足某个分布的样本点?
有的同学会问,想生成满足某种分布的样本点,怎么方便的做到呢?
scipy
包中的 stats
模块就是做这件事情的,它里面预置了很多种常见分布,比如常见的连续分布几十种:
常见的离散分布十几种:
image并且,还提供了连续和离散分布的接口对象:rv_continuous
, rv_discrete
,真的很强大。
生成满足某个分布的样本点
今天我们使用 scipy
玩一个大家常见的一维正态分布,看看如何生成满足正态分布的样本点,以及展示正态分布的常见特性。
导入所需包:
import numpy as np
from scipy.stats import norm
import matplotlib.pyplot as plt
生成一维的正态分布,其均值为 0,标准差为 1,创建 100 个样本点:
data = norm.rvs(0,1,size=100)
x,y = np.arange(100), data
plt.plot(x,y,color='b')
plt.scatter(x,y,color='',edgecolor='orange')
plt.grid()
plt.show()
使用 norm.fit
拟合刚刚生成的数据,观察实际数据的均值和方差:
norm.fit(data)
拟合后的均值和标准差:
(0.1515041527608994, 0.9540826823836187)
pdf 概率密度函数
norm.pdf
能生成正态分布的概率密度函数,分布的两个参数自己可配置:
plt.close() x = np.arange(-5,5,0.1) y = norm.pdf(x) # 标准正态分布的概率密度值 plt.plot(x,y,color='b') plt.scatter(x,y,color='',edgecolor='orange') plt.grid() plt.show()
标准正态分布的概率密度图:
imagecdf 累计分布函数
cdf 曲线 与 x 轴所围区域的面积之和等于 1:
plt.close() x = np.arange(-5,5,0.1) y = norm.cdf(x) plt.plot(x,y,color='b') plt.scatter(x,y,color='',edgecolor='orange') plt.grid() plt.show()
标准正态分布的累计分布图:
image还有更多实用的方法,感兴趣可去探索下。
转自:Python小例子
网友评论