看了很多博客,感觉很多人对np.random.binomial()的解释都写得不是很清楚,或者写错了,特别是对该函数的参数解释。本文以二项式分布的理论概念为起点,对该函数进行解释,欢迎讨论指正。

二项式分布

二项分布是由伯努利提出的概念,指的是重复n次(注意:这里的n和binomial()函数参数n不是一个意思)独立的伯努利试验,如果事件X服从二项式分布,则可以表示为X~B(n,p),则期望E(X)=np,方差D(X)=np(1-p)。简单来讲就是在每次试验中只有两种可能的结果(例如:抛一枚硬币,不是正面就是反面,而掷六面体色子就不是二项式分布),而且两种结果发生与否互相对立,并且相互独立,与其它各次试验结果无关,事件发生与否的概率在每一次独立试验中都保持不变。

函数原型及参数:numpy.random.binomial(n,p,size=None)

官方参数的解释如下:

参数 解释
n int型或者一个int型的数组,大于等于0,接受浮点数但是会被截断(官方解释:n is truncated to an integer,例如:输入4.6或者4.2都会被当做4来计算)成整数来使用。
p float或者一组float的数组,0≤p≤1;
size 可选项,int或者int的元组,表示的输出的大小,如果提供了size,例如(m,n,k),那么会返回m×n×k个数值。如果size=None,也就是默认没有的情况,当n和p都是一个数字的时候只会返回一个值,否则返回的是np.broadcast(n,p).size个数值。
reture 返回值。size是一个整数N时,返回一个长度为N的一维数组;size是(X,Y)类型元组时,返回一个X行Y列二维数组;size是(X,Y,Z)类型元组时,返回一个三维数组(三维数组不能以三维形式直接输出,会输出X个Y行Z列的二维数组,以此类推)。

官方解释中只规定了参数的类型和范围,但是并没有给出具体的数学意义,不便于理解。现在对逐个参数进行解释:

参数n一次试验的样本数n,并且相互不干扰。 有些博客解释这里的参数n是试验次数,我认为不对,或许现在看起来好像一次试验n个互不相干的样本n次试验一个样本是一样的,但是如果把n理解为试验次数,那和size参数的意义会产生冲突;

参数p:事件发生的概率p,范围[0,1]。这里有个理解的关键就是 “事件发生”到底是指的什么事件发生?准确来讲是指:如果一个样本发生的结果要么是A要么是B,事件发生指的是该样本其中一种结果发生。

参数size:限定了返回值的形式(具体见上面return的解释)和实验次数。当size是整数N时,表示实验N次,返回每次实验中事件发生的次数;size是(X,Y)时,表示实验X*Y次,以X行Y列的形式输出每次试验中事件发生的次数。(如果将n解释为试验次数而不是样本数的话,这里返回数组中数值的意义将很难解释)。

return返回值 : 以size给定的形式,返回每次试验事件发生的次数,次数大于等于0且小于等于参数n。注意:每次返回的结果具有随机性,因为二项式分布本身就是随机试验。

给出几个例子:

例1: n=1时,重复伯努利试验。
一次抛一枚硬币试验,正面朝上发生的概率为0.5,做10次实验,求每次试验发生正面朝上的硬币个数:

test = np.random.binomial(1, 0.5, 10)
print(test)

输出:[1 1 1 0 1 1 1 0 0 0]

例2: n>1时,多个样本进行试验:
一次抛5枚硬币,每枚硬币正面朝上概率为0.5,做10次试验,求每次试验发生正面朝上的硬币个数:

test = np.random.binomial(5, 0.5, 10)
print(test)

输出:[1 5 5 2 4 2 3 3 2 3]

例3: size为元组的形式时:
一次抛5枚硬币,每硬币正面朝上概率为0.5,做50次试验,求每次试验发生正面朝上的硬币个数:

test = np.random.binomial(5, 0.5, (10, 5))
print(test)

输出二维数组(ndarray类型):

[[1 2 2 4 1][2 5 3 4 3][1 4 1 2 4][3 1 1 3 1][1 4 2 4 2][0 1 3 2 2][4 2 1 1 2][2 5 3 2 3][1 1 2 2 2][3 2 1 4 2]]

例4: 一次抛2个硬币,每枚硬币抛到正反两面的概率都是0.5,那么两个硬币都是正面的概率是多少?发生一正一反的概率是多少?
显然答案是0.25和0.5,试验次数越大,越能接近理论概率:

test = sum(np.random.binomial(2, 0.5, 100000) == 2) / 100000
print(test)

输出:0.24843

test = sum(np.random.binomial(2, 0.5, 100000) == 1) / 100000
print(test)

输出:0.49938

Python中的np.random.binomial()二项式分布函数详解相关推荐

  1. python中append函数解析_对python中的pop函数和append函数详解

    对python中的pop函数和append函数详解 pop()函数 1.描述 pop() 函数用于移除列表中的一个元素(默认最后一个元素),并且返回该元素的值. 语法 pop()方法语法: list. ...

  2. python中的class怎么用_对python 中class与变量的使用方法详解

    python中的变量定义是很灵活的,很容易搞混淆,特别是对于class的变量的定义,如何定义使用类里的变量是我们维护代码和保证代码稳定性的关键. #!/usr/bin/python #encoding ...

  3. python中class变量_对python 中class与变量的使用方法详解

    python中的变量定义是很灵活的,很容易搞混淆,特别是对于class的变量的定义,如何定义使用类里的变量是我们维护代码和保证代码稳定性的关键. #!/usr/bin/python #encoding ...

  4. python中if语句的实例_对python中if语句的真假判断实例详解

    说明 在python中,if作为条件语句,当if后面的条件参数为真时,则执行后面的语句块,反之跳过,为了深入理解if语句,我们需要知道if语句的真假判断方式. 示例 在python交互器中,经过测试发 ...

  5. Python中的list/tuple/dict/set数据类型详解

    Python中的list/tuple/dict/set数据类型详解 Python内部内置了一些数据类型与结构,可以方便在编程时候的使用. list List存储一系列的有序集合,并且元素内容可变(可更 ...

  6. Computer:字符编码(ASCII编码/GBK编码/BASE64编码/UTF-8编码)的简介、案例应用(python中的编码格式及常见编码问题详解)之详细攻略

    Computer:字符编码(ASCII编码/GBK编码/BASE64编码/UTF-8编码)的简介.案例应用(python中的编码格式及常见编码问题详解)之详细攻略 目录 符串编码(ASCII编码/GB ...

  7. 站长在线Python精讲:在Python中匹配字符串的3个方法详解

    欢迎你来到站长在线的站长学堂学习Python知识,本文学习的是<在Python中匹配字符串的3个方法详解>.本知识点主要内容有:使用match()方法进行匹配.使用search()方法进行 ...

  8. 站长在线Python精讲:在Python中格式化字符串的两种方法详解

    欢迎你来到站长在线的站长学堂学习Python知识,本文学习的是<在Python中格式化字符串的两种方法详解>.本知识点主要内容有:使用%操作符格式化字符串和使用format()方法格式化字 ...

  9. Python中Print()函数的用法___实例详解(二)(全,例多)

    Python中Print()函数的用法___实例详解(二)(全,例多) 目录 十一.Print()小例子 十二.Print()中文输入显示乱码问题 十三.Print()写入文件 十四.print()在 ...

  10. python中的pop函数和append函数_对python中的pop函数和append函数详解

    pop()函数 1.描述 pop() 函数用于移除列表中的一个元素(默认最后一个元素),并且返回该元素的值. 语法 pop()方法语法: list.pop(obj=list[-1]) 2.参数 obj ...

最新文章

  1. google nexus 5 刷机 卡刷 救砖教程
  2. numpy笔记 linalg
  3. 鸿蒙系统今日发布 中国人自己的操作系统,鸿蒙系统今日发布,中国人自己的操作系统...
  4. openssl c++实现bouncycastle中AES加解密
  5. java编写猫抓老鼠程序_Java抓鱼程序
  6. angularjs--resource
  7. Spring Cloud 与 Dubbo 对比整理(2)
  8. 响应式个人简历网页源代码
  9. oracle 排除节假日,ORACLE 计算节假日
  10. 行人重识别论文阅读1-Watching You: Global-guided Reciprocal Learning for Video-based Person Re-identification
  11. 互联网发展阶段的三阶段是什么?从门户到搜索,到移动互联网
  12. Duplicate Cleaner Pro v5.0.13 电脑重复文件查找清理工具
  13. 肝了一个月,全网最全的数据结构与算法知识总结
  14. pta 7-10 古风排版 (20 分)
  15. MySQL优化系列3-Linux查看CPU、内存、磁盘、网络信息
  16. c学习笔记 文件输入/ 输出 20210314
  17. Java微信小程序支付篇
  18. Android程序员面试必备的知识点,androidauto地图
  19. 快速EDAS字体嵌入问题
  20. Android 项目实战:智慧北京(黑马)

热门文章

  1. 使用zxing生成彩色或带图片的二维码
  2. QRCode.js:使用 JavaScript 生成二维码
  3. 用project做成本概述报表
  4. wamp+php+下载,WAMP(Windows+Apache+Mysql+PHP) 下载配置一条龙
  5. 【千锋Python2205班9.26笔记-day06-列表(一阶段)】
  6. 单片机复位电路的可靠性设计及精典实用复位电路
  7. Halcon学习-算子学习-映射/傅里叶变换/gen_grid_region/rft_generic例程
  8. 【安全牛学习笔记】Kali Linux基本工具
  9. 但行好事,莫问前程。
  10. 【opencv4.3.0教程】12之图像的加add、减subtract、乘multiply、除divide