给定n次试验,每次试验获胜的概率为p,赢得r次或更多试验的概率是多少?你知道吗
我的想法如下: 胜负的每一个组合都有概率p^w*(p-1)^(n-w),其中w是胜数。你知道吗
每次赢的次数都可能出现在nCr组合中,例如,3次赢2次意味着你可能会输掉第一次、第二次或第三次,例如3次组合。你知道吗
所以三次中赢两次的概率是3C2*p^2*(1-p)^1。 赢两次或两次以上的概率就是这两次和三次赢的计算的总和。你知道吗
我有以下代码:
import math
def nCr(n,r):
f = math.factorial
return f(n) / f(r) / f(n-r)
def prob_at_least(n, r, p):
probs = [nCr(n,k)*pow(p,k)*pow(1.0-p,n-k) for k in range(r, n+1)]
return sum(probs)
这段代码是有效的,但是是否有一个内置的函数,或者用一个较短的方法来实现相同的功能?你知道吗
有much faster ways to implement combinations:
但是如果您经常这样做,您可能需要考虑像scipy这样的包,它有^{} 用于有效的组合计算
在
scipy.stats
模块中,可以使用binom
。你知道吗编辑:要获得r或更多:
编辑:由ljeabmreosn给出的解给出了不需要循环的累积分布函数。你知道吗
相关问题 更多 >
编程相关推荐