【编写环境二】python库scipy.stats各种分布函数生成、以及随机数生成【泊松分布、正态分布等】
平时我们在编写代码是会经常用到一些随机数,而这些随机数服从一定的概率分布。
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杯水以下的概率?
泊松分布的概率函数为:
累积概率分布函数为:
均值方差:泊松分布的均值和方差都是。(上述问题一:
=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 随机数生成:
生成服从=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<8)时的概率:{}'.format(stats.poisson.cdf(k=8, mu=15)))
print('p(8<x<20)时的概率:{}'.format(stats.poisson.cdf(k=20, mu=15) - stats.poisson.cdf(k=8, mu=15)))

当λ=15时,得出的概率值:
p(x<8)时的概率:0.037446493479672875
p(8<x<20)时的概率:0.8795825964888668
3.伯努利分布
3.1伯努利概率分布
伯努利分布:伯努利试验单次随机试验,只有"成功(值为1)"或"失败(值为0)"这两种结果,又名两点分布或者0-1分布。
import numpy as np
from scipy import stats
import matplotlib.pyplot as plt
from pylab import mpl
mpl.rcParams['font.sans-serif'] = ['SimHei']#中文雅黑字体
plt.rcParams['axes.unicode_minus']=False #显示负号X=np.arange(0,2,1)#[0,1)
p=0.7#库里投三分命中率
pList=stats.bernoulli.pmf(X,p)#在离散分布中,请将pmf改为pdf
print(pList)
plt.plot(X,pList,marker='o',linestyle='None')
'''
vlines用于绘制竖直线(vertical lines),
参数说明:vline(x坐标值,y坐标最小值,y坐标最大值)
我们传入的X是一个数组,是给数组中的每个x坐标值绘制直线,
数值线y坐标最小值是0,y坐标最大值是对应的pList中的值'''
plt.vlines(X,(0,0),pList)
plt.xlabel('随机变量:库里投篮1次')
plt.ylabel('概率')
plt.title('伯努利分布:p=%.2f'% p)
plt.show()

3.2 伯努利分布随机数生成
p=0.7#发生概率
b=stats.bernoulli.rvs(p,random_state=None)#random_state=None每次生成随机
print(b)
【编写环境二】python库scipy.stats各种分布函数生成、以及随机数生成【泊松分布、正态分布等】的更多相关文章
- Scipy教程 - 统计函数库scipy.stats
http://blog.csdn.net/pipisorry/article/details/49515215 统计函数Statistical functions(scipy.stats) Pytho ...
- 利用python库stats进行t检验
t检验通常分为三种,分别是单样本t检验.双样本t检验和配对样本t检验.本文基于python的scipy.stats函数对每种t检验进行了介绍和实验. 一.t检验介绍 无论哪种t检验,都有以下的基本 ...
- [原创博文] 用Python做统计分析 (Scipy.stats的文档)
[转自] 用Python做统计分析 (Scipy.stats的文档) 对scipy.stats的详细介绍: 这个文档说了以下内容,对python如何做统计分析感兴趣的人可以看看,毕竟Python的库也 ...
- Python 库打包分发、setup.py 编写、混合 C 扩展打包的简易指南(转载)
转载自:http://blog.konghy.cn/2018/04/29/setup-dot-py/ Python 有非常丰富的第三方库可以使用,很多开发者会向 pypi 上提交自己的 Python ...
- Python从零开始编写控制程序(二)
# Python从零开始编写控制程序(二)前言:终于考完期末了,鸽了很久的远控Python终于有时间更新下了.上篇文章里,我们解决了注册表写入和Python编写为exe程序的问题.那么这篇文章我们来研 ...
- Appium+python移动端自动化测试-python库及pycharm安装(二)
一.安装python库 安装python库有很多种方法,如pip安装.源文件安装.运行包安装,但我们最常用的就是使用pip进行安装 Appium+python做移动端的自动化测试,所需要安装以下pyt ...
- python编写环境(种类)
python编写环境(种类) 官方推荐 cpython 转成C的字节码 jython转成Java的字节码 ironpython转成C#字节码 pypy转换成动态编译 开发快,运行快
- python scipy stats学习笔记
from scipy.stats import chi2 # 卡方分布from scipy.stats import norm # 正态分布from scipy.stats import t # t分 ...
- 概率论中常见分布总结以及python的scipy库使用:两点分布、二项分布、几何分布、泊松分布、均匀分布、指数分布、正态分布
概率分布有两种类型:离散(discrete)概率分布和连续(continuous)概率分布. 离散概率分布也称为概率质量函数(probability mass function).离散概率分布的例子有 ...
- (二)Robto Framewoek使用自己的python库
有时候找不到合适的库来完成自动化工作,则需要使用自己定义的python库.本文简单描述自建python库,以及在robotframework中的使用方法. 新建库目录 在C:\Python27\Lib ...
随机推荐
- A*(A star)搜索总结
定义 先复制一则定义 A*算法在人工智能中是一种典型的启发式搜索算法 启发中的估价是用估价函数表示的: h(n)=f(n)+g(n) 其中f(n)是节点n的估价函数 g(n)表示实际状态空间中从初始节 ...
- Kafka 原理以及分区分配策略剖析
一.简介 Apache Kafka 是一个分布式的流处理平台(分布式的基于发布/订阅模式的消息队列[Message Queue]). 流处理平台有以下3个特性: 可以让你发布和订阅流式的记录.这一方面 ...
- 【QtJson】用Qt自带的QJson,直接一步到位封装和解析一个类的实例对象!
之前貌似没有看过类似的代码 我们现在的要求就是直接在不知道类成员的情况下,把一个类丢进去就能生成一个Json字符串,也可以把一个字符串和一个类成员丢进去就能根据成员变量名匹配到元素并赋值,大概就这样 ...
- freeswitch通过limit限制cps
概述 freeswitch在业务开发中有极大的便利性,因为fs内部实现了很多小功能,这些小功能组合在一起,通过拨号计划就可以实现很多常见的业务功能. 在voip云平台的开发中,我们经常会碰到资源的限制 ...
- java进阶(42)--注解
文档目录: 一.概念 二.注解的使用方法 三.JDK内置注解 四.元注释 五.注解中定义属性 六.反射注解的对象 七.反射注解对象的属性值 ------------------------------ ...
- 2023浙江省大学生信息安全竞赛技能赛初赛 部分wp
CRYPTO 小小数学家 1.题目信息 查看代码 19+49=? 96-31=? 86-3=? 20+47=? 29+55=? 35+35=? 81+42=? 73-16=? 52+48=? 0+56 ...
- js - body的滚动事件的坑
文章来源 : https://www.cnblogs.com/Zting00/p/7497629.html 踩过些坑,得到的结论,不一定精确 1. body的滚动条,刷新页面的时候不会回到顶部.其他d ...
- [转帖]一文深度讲解JVM 内存分析工具 MAT及实践(建议收藏)
https://juejin.cn/post/6911624328472133646 1. 前言 熟练掌握 MAT 是 Java 高手的必备能力,但实践时大家往往需面对众多功能,眼花缭乱不知如何下手, ...
- [转帖]ssh_exporter
https://github.com/treydock/ssh_exporter SSH exporter The SSH exporter attempts to make an SSH conne ...
- Oracle 监控客户端的连接数量趋势
Oracle 监控客户端的连接数量趋势 背景 前期简单总结了table方式将表信息展示出来的方法 但是感觉这样非常不直观. 想着能够做出一个趋势来. 时序数据库的最佳的使用方式. 之前的确是太靠自己的 ...