2017-09-20 5 views
0

ラムダaのポアソン分布から乱数を生成する関数(random.poisson関数を使用せずに)を書いていました。ランダムポアソン数の生成

異なるパラメータで関数を実行すると、常に0が返されます。アルゴリズムの問​​題だと思いますが、どこが間違っているのかわかりません。

ここに私のコードです。

#takes a as lambda (mean) 
def random_poisson(a): 
    x = 0 
    p = 1 
    while p >= math.exp(a): 
     i = random.random() 
     p = p * i 
     x += 1 

    return x 

異なるラムダ値試す:

print(random_poisson(3)) 
print(random_poisson(5)) 
print(random_poisson(math.log(5))) 

出力を:

0 
0 
0 

本当にありがとうございました!任意の正aについては

+0

使用したパラメータの例を挙げてください。 – DyZ

+0

@DYZ私は例を追加しました:) – xzhang66

+0

'math.exp(-a)'をあらかじめ計算しておき、 'while'の比較で保存した結果を使うべきです。 – pjs

答えて

1

math.exp(a)は1より大きいが、pは、ループ条件は、ループが実行されることはありません、本当のことはありません、そして、あなたの関数がxの初期値を返します1です。

+0

ああ私はあなたを持っています!それはaの代わりに-aでなければなりません。本当にありがとう! – xzhang66