【编写环境二】python库scipy.stats各种分布函数生成、以及随机数生成【泊松分布、正态分布等】

您所在的位置:网站首页 随机变量的生成函数公式有哪些 【编写环境二】python库scipy.stats各种分布函数生成、以及随机数生成【泊松分布、正态分布等】

【编写环境二】python库scipy.stats各种分布函数生成、以及随机数生成【泊松分布、正态分布等】

2024-06-29 13:36| 来源: 网络整理| 查看: 265

平时我们在编写代码是会经常用到一些随机数,而这些随机数服从一定的概率分布。

1.泊松分布、正态分布等生成方法 1.1常见分布:

stats连续型随机变量的公共方法:

*离散分布的简单方法大多数与连续分布很类似,但是pdf被更换为密度函数pmf。

1.2 生成服从指定分布的随机数

norm.rvs通过loc和scale参数可以指定随机变量的偏移和缩放参数,这里对应的是正态分布的期望和标准差。size得到随机数数组的形状参数。(也可以使用np.random.normal(loc=0.0, scale=1.0, size=None))

import numpy as np import scipy.stats as st st.norm.rvs(loc = 0,scale = 0.1,size =10) st.norm.rvs(loc = 3,scale = 10,size=(2,2)) #结果 array([[-13.26078265, 0.88411923],[ 5.14734849, 17.94093177]]) array([ 0.12259875, 0.07001414, 0.11296181, -0.00630321, -0.04377487, 0.00474487, -0.00728678, 0.03860256, 0.06701367, 0.03797084]) 1.3 求概率密度函数指定点的函数值

stats.norm.pdf正态分布概率密度函数。

st.norm.pdf(0,loc = 0,scale = 1) st.norm.pdf(np.arange(3),loc = 0,scale = 1) #结果 0.3989422804014327 array([ 0.39894228, 0.24197072, 0.05399097]) 1.4 求累计分布函数指定点的函数值

stats.norm.cdf正态分布累计概率密度函数

st.norm.cdf(0,loc=3,scale=1) st.norm.cdf(0,0,1) #结果: 0.0013498980316300933 0.5 1.5 累计分布函数的逆函数

stats.norm.ppf正态分布的累计分布函数的逆函数,即下分位点。

z05 = st.norm.ppf(0.05) print(z05) st.norm.cdf(z05) #结果 -1.6448536269514729 0.049999999999999975 2. 泊松分布 2.1 泊松分布问题:

假设我每天喝水的次数服从泊松分布,并且经统计平均每天我会喝8杯水 请问: 1、我明天喝7杯水概率? 2、我明天喝9杯水以下的概率?

泊松分布的概率函数为:

                                                   P(X=k)=\frac{\lambda^{k}}{k !} e^{-\lambda}, k=0,1,2, \ldots

累积概率分布函数为:

                                  P(X \leq x)=\sum_{k=0}^{x} \frac{\lambda^{k} e^{-\lambda}}{k !}

均值方差:泊松分布的均值和方差都是\lambda。(上述问题一:\lambda=8,k=7)

from scipy import stats p = stats.poisson.pmf(7, 8) print("喝7杯水概率:",p) p = stats.poisson.cdf(9, 8) print("喝9杯水以下的概率:",p) #结果: 喝7杯水概率: 0.13958653195059664 喝9杯水以下的概率: 0.716624258727011 2.2 泊松概率及累积概率分布(以上面例子为例): from scipy import stats import matplotlib.pyplot as plt plt.rcParams['font.sans-serif']=['SimHei']#用来正常显示中文标签 plt.rcParams['axes.unicode_minus']=False#用来正常显示负号 X=range(0,16) Y=[] for k in X: p = stats.poisson.pmf(k, 8) Y.append(p) plt.bar(X, Y, color="red") plt.xlabel("次数") plt.ylabel("概率") plt.title("喝水次数和概率") plt.show()

可以看出,在均值8附近,概率最大,均值两边概率呈递减状态

2.3 随机数生成:

生成服从\lambda=8的泊松分布随机数14个:

from scipy import stats # 设置random_state时,每次生成的随机数一样--任意数字 #不设置或为None时,多次生成的随机数不一样 sample = stats.poisson.rvs(mu=8, size=14, random_state=None) print(sample) #结果 [ 9 5 9 4 8 12 9 7 12 9 10 7 3 6] 2.4 泊松分布概率密度函数和累计概率绘图 import numpy as np import scipy.stats as stats import matplotlib.pyplot as plt import matplotlib.style as style # 绘图配置 style.use('seaborn-bright') plt.rcParams['figure.figsize'] = (15, 8) plt.figure(dpi=120) # 一段时间内发生的次数 data = np.arange(50) # PMF 绘制泊松分布的概率密度函数 plt.plot(data, stats.poisson.pmf(data, mu=5), label='pmf(mu=5)') plt.bar(data, stats.poisson.pmf(data, mu=5), alpha=.5) # CDF 累积概率密度 plt.plot(data, stats.poisson.cdf(data, mu=5), label='cdf(mu=5)') # PMF 绘制泊松分布的概率密度函数 plt.plot(data, stats.poisson.pmf(data, mu=15), label='pmf(mu=15)') plt.bar(data, stats.poisson.pmf(data, mu=15), alpha=.5) # CDF 累积概率密度 plt.plot(data, stats.poisson.cdf(data, mu=15), label='cdf(mu=15)') # PMF 绘制泊松分布的概率密度函数 plt.plot(data, stats.poisson.pmf(data, mu=30), label='pmf(mu=30)') plt.bar(data, stats.poisson.pmf(data, mu=30), alpha=.5) # CDF 累积概率密度 plt.plot(data, stats.poisson.cdf(data, mu=30), label='cdf(mu=30)') plt.legend(loc='upper left') plt.title('poisson') plt.show() print('p(x


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3