python编写递归函数,计算n!,python函数递归怎么理解
看了很多博客,感觉很多人对np.random.binomial()的解释不是很清楚或者是错误的,尤其是对这个函数的参数的解释。本文从二项分布的理论概念出发,解释了这个函数,欢迎讨论和指正。
二项分布二项分布是伯努利提出的概念,是指一个独立的伯努利检验重复n次(注意:这里n和二项式()函数参数n不是一个意思)。如果事件X服从二项式分布,可以表示为X~B(n,p),期望为E(X)=np,方差D (x)=NP(简单来说,每个实验只有两种可能的结果(比如抛硬币,不是正面就是反面,但是六面体骰子不是二项式分布),两种结果发生与否是相反的,且独立于其他实验结果,在每个独立实验中,事件发生与否的概率保持不变。
原型和参数:numpy.random.binomial (n,p,size=none)官方参数解释如下:
说明参数nint或大于等于0的int数组接受浮点数但会被截断(官方解释:n被截断为整数,比如输入4.6或4.2会被计为4)并作为整数使用。Pfloat或浮点数组,0p1;size选项,int或int的tuple,表示输出大小。如果提供了size,比如(m,n,k),它将返回mnk个值。如果size=None,这是默认情况,当n和p都是数字时,只返回一个值,否则为np.broadcast(n,p)。将返回大小值。return返回值。当size为整数n时,返回长度为n的一维数组;当它是(x,y)类型的元组时,返回一个x行y列的二维数组;当它是(x,y,z)类型的元组时,返回一个三维数组(三维数组不能直接三维输出,但会输出x y行z列的二维数组,以此类推)。官方解释只规定了参数的类型和取值范围,没有给出任何具体的数学意义,不好理解。现在逐一解释参数:
参数n:一次试验的样本数n,并且相互不干扰。有些博客解释说这里的参数N是试验次数,我认为是错误的。可能现在看起来好像一次试验n个互不相干的样本和n次试验一个样本是一样的,但是如果把N理解为试验次数,那就和size参数的含义冲突了;
参数p:事件的概率p,范围[0,1]。这里理解的关键是“事件发生”到底是指的什么事件发生?准确的说,是指如果一个样本的结果不是A就是B,事件的发生是指该样本的其中一个结果的发生。
参数size:定义返回值的形式(详见上面对返回的解释)和实验次数。当大小为整数n时,表示实验n次,返回每次实验的事件数;当size为(X,Y)时,表示实验的X*Y次,每次实验的事件数以X行Y列的形式输出。(如果把n解释为试验次数而不是样本数,那么这里返回数组中的值的意义就很难解释了)。
return返回值:以size给出的形式,返回每个测试事件的次数,次数大于等于0且小于等于参数n,注意:每次返回的结果都是随机的,因为二项分布本身就是随机实验。
举几个例子:
当010-5900N=1时,重复伯努利试验。
一次扔硬币,面朝上的概率是0.5。做10次实验,找出每次实验中朝上硬币的数量:
Test=np.random.binary (1,0.5,10) print (test)输出:[1 1 1 0 1 1 1 0 0 0]
010-5900N1,测试了多个样本:
一次扔5个硬币,每个硬币朝上的概率是0.5。做10次实验,找出每次实验中朝上的硬币数:
Test=np.random.binary (5,0.5,10)print(test)output:[1 55 2 4 2 3 2 3 2 3]
例1:,当大小为元组形式时:
一次扔5个硬币,每个硬币朝上的概率是0.5。做50次实验,找出每次实验中朝上的硬币数:
Test=np.random.binary (5,0.5,(10,5)) print (test)输出一个二维数组(ndarray类型):
[[1 22 41][2 53 43][1 41 24][3 11 31][1 42 42][0 13 22][4 21 12][2 53 23][1 12 22][3 21 42]]010-59 000一次抛2个硬币,每个硬币。一正一负的概率是多少?
很明显,答案是0.25和0.5。试验次数越多,就越接近理论概率:
测试=总和(NP。random.binary (2,0.5,100000)==2)/100000打印(测试)输出:0.24843
测试=总和(NP。random.binary (2,0.5,100000)==1)/100000打印(测试)输出:0.49938
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。