2016-11-27 4 views
0

Pythonに関する質問二項関数を作成する要求に取り組んでいます。入力は4つ、最後は真/偽です。 trueの場合はcdfを返し、デフォルトではtrueを返します。 falseの場合はpmfを返します。これは私がこれまでに得たものです。誰かがコードを完成させる方法について私にアドバイスしますか?二項分布出力Pythonを使用したCDF/PMF

def binomial_distribution(x,n,p,cum): 
    """ 
    Computes the probability of having x successes out of n trials. 
    Each trial has a probability of success p 
    """ 
    nCx = combination(n,x) 
    q = 1-p 
    return nCx*(p**x)*(q**(n-x)) 
+2

これまでに行ったことは何ですか? –

答えて

0

ここに必要なコードです。注意事項は次のようになります。

def factorial(n): 
    if n == 0: return 1 
    factrl = n 
    while n > 2: 
     n -= 1 
     factrl = factrl * n 
    return factrl 

def combination(n, x): 
    return factorial(n)/(factorial(x)*factorial(n-x)) 

def binomial_distribution(x,n,p,cum = True): 
    """ 
    Computes the probability of having x successes out of n trials. 
    Each trial has a probability of success p 
    """ 
    nCx = combination(n,x) 
    q = 1-p 

    #What helps is a conditional return statement as below 
    if cum: return bin_cdf(x, n, p) 
    else: return nCx*(p**x)*(q**(n-x)) 

def bin_cdf(x, n, p): 
    cumul = 0.0 
    while x > 0: 
     print(x) 
     cumul += binomial_distribution(x, n, p, False) #Sums using formula 
     #This kind of recursion is not only possible but encouraged 
     x -= 1 
    return cumul 

結果はサードパーティの電卓を使用して検証されています。また、エラーを処理しないことに注意してください。良いプログラムでは、入力値も有効であるかどうかをテストします(nは常にxより大きく、は[0,1]の範囲の適切な確率値です)

関連する問題