2013-06-07 4 views
7

私は単純な問題があります。私は、pパーセントのケースでは0を生成し、それ以外のケースでは1を生成する関数を作成する方法が必要です。私はこのような()はrandom.Randomでそれをやってみました:Python - モデリングの確率

p = 0.40 

def generate(): 
    x = random.random() 
    if x < p: 
     return 0 
    else: 
     return 1 

しかし、これは良い方法のように見えるしていません。それとも?

+1

これは簡単で明白で正確です。それは間違っていると思いますか? –

+0

私は分かりません。私はちょうどこれについて奇妙な気持ちを持っていたので、私はよく尋ねると思った。ありがとう。 – darxsys

+1

あなたは 'return x> = p'を行うことができますが、これは短いですが読みにくいかもしれません。 – lenz

答えて

8

あなたの現在の方法は完全に問題ありません。多くの試行で数回試行して確認できます。たとえば、1000000回の試行で約600000の真の結果が得られるとします。

>>> sum(generate() for i in range(1000000)) 
599042 
>>> sum(generate() for i in range(1000000)) 
599670 
>>> sum(generate() for i in range(1000000)) 
600011 
>>> sum(generate() for i in range(1000000)) 
599960 
>>> sum(generate() for i in range(1000000)) 
600544 

正しいと思われます。

コメントで述べたように、あなたはあなたの方法ビットを短縮することができます:あなたの代わりにTrueFalse10をしたい場合は、int(random.random() >= p)を使用することができます

p = 0.40 

def generate(): 
    return random.random() >= p 

が、これは、ほぼ間違いなく不要です。