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

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各种分布函数生成、以及随机数生成【泊松分布、正态分布等】的更多相关文章

  1. Scipy教程 - 统计函数库scipy.stats

    http://blog.csdn.net/pipisorry/article/details/49515215 统计函数Statistical functions(scipy.stats) Pytho ...

  2. 利用python库stats进行t检验

    ​ t检验通常分为三种,分别是单样本t检验.双样本t检验和配对样本t检验.本文基于python的scipy.stats函数对每种t检验进行了介绍和实验. 一.t检验介绍 无论哪种t检验,都有以下的基本 ...

  3. [原创博文] 用Python做统计分析 (Scipy.stats的文档)

    [转自] 用Python做统计分析 (Scipy.stats的文档) 对scipy.stats的详细介绍: 这个文档说了以下内容,对python如何做统计分析感兴趣的人可以看看,毕竟Python的库也 ...

  4. Python 库打包分发、setup.py 编写、混合 C 扩展打包的简易指南(转载)

    转载自:http://blog.konghy.cn/2018/04/29/setup-dot-py/ Python 有非常丰富的第三方库可以使用,很多开发者会向 pypi 上提交自己的 Python ...

  5. Python从零开始编写控制程序(二)

    # Python从零开始编写控制程序(二)前言:终于考完期末了,鸽了很久的远控Python终于有时间更新下了.上篇文章里,我们解决了注册表写入和Python编写为exe程序的问题.那么这篇文章我们来研 ...

  6. Appium+python移动端自动化测试-python库及pycharm安装(二)

    一.安装python库 安装python库有很多种方法,如pip安装.源文件安装.运行包安装,但我们最常用的就是使用pip进行安装 Appium+python做移动端的自动化测试,所需要安装以下pyt ...

  7. python编写环境(种类)

    python编写环境(种类) 官方推荐 cpython 转成C的字节码 jython转成Java的字节码 ironpython转成C#字节码 pypy转换成动态编译 开发快,运行快

  8. python scipy stats学习笔记

    from scipy.stats import chi2 # 卡方分布from scipy.stats import norm # 正态分布from scipy.stats import t # t分 ...

  9. 概率论中常见分布总结以及python的scipy库使用:两点分布、二项分布、几何分布、泊松分布、均匀分布、指数分布、正态分布

    概率分布有两种类型:离散(discrete)概率分布和连续(continuous)概率分布. 离散概率分布也称为概率质量函数(probability mass function).离散概率分布的例子有 ...

  10. (二)Robto Framewoek使用自己的python库

    有时候找不到合适的库来完成自动化工作,则需要使用自己定义的python库.本文简单描述自建python库,以及在robotframework中的使用方法. 新建库目录 在C:\Python27\Lib ...

随机推荐

  1. Cypress系列(1)-Window下安装Cypress并打开

    Cypress系列(1)-Window下安装Cypress并打开 系统要求 Cypress是一个被安装在你电脑上的桌面应用,你的操作系统需要满足如下条件才能正常安装 Mac OS 10.9+(仅提供6 ...

  2. 【C++第三方库】Windows下编译和使用 WebSocket++/WebSocketpp

    应用场景: 使用C++开发一个支持websocket协议的服务进程,可与HTML5(浏览器js文件)通信.来实现替换基于firebreath框架的跨浏览器插件开发. 当前,讲述websocketpp开 ...

  3. Codeforces Round #694 (Div. 2) A~D、E

    比赛链接:Here 1471A. Strange Partition 题意: 给一个数组,数组中的所有元素可以任意合并,求数组的每个元素除以x上取整的和,求结果的最大值和最小值. 思路: 瞎猜.最小值 ...

  4. Problem 550A - Two Substrings

    A - Two Substrings You are given string s. Your task is to determine if the given strings contains t ...

  5. LeetCode75 颜色分类 (三路快排C++实现与应用)

    三路快排是快速排序算法的升级版,用来处理有大量重复数据的数组. 主要思想是选取一个key,小于key的丢到左边,大于key的丢到右边,递归实现即可. 具体操作过程参考:https://blog.csd ...

  6. [网络克隆]利用tiny proxy实现局域网内批量安装WINDOWS操作系统。

    说明:本文支持UEFI及BIOS系统克隆.支持UEFI及BIOS网络引导,适用于新旧几乎所有支持网络启动的电脑. 事前准备: 保证被克隆的电脑为同一配置,或者各硬件差异不大,比如CPU同如英特尔8代的 ...

  7. 用ArcGIS模型构建器生成、导出Python转换空间坐标系的代码

      本文介绍在ArcMap软件中,通过创建模型构建器(ModelBuilder),导出地理坐标系与投影坐标系之间相互转换的Python代码的方法.   在GIS领域中,矢量.栅格图层的投影转换是一个经 ...

  8. [吉他谱]duvet

  9. C++ 不使用虚析构的后果及分析

    很多 C++ 方面的书籍都说明了虚析构的作用: 保证派生类的析构函数被调用,并且使析构顺序与构造函数相反 保证资源能够被正确释放 很久一段时间以来,我一直认为第 2 点仅仅指的是:当派生类使用 RAI ...

  10. Redis 集群模式搭建

    本文为博主原创,未经允许不得转载: 目录: 1. 哨兵模式与集群模式对比 2. Redis 集群架构搭建 3. 集群原理分析 4. 集群元数据维护方式对比 5. redis 分布式寻址 6. 集群选举 ...