2017-06-15 14 views
0

は、私たちは次の関数を考えてみましょう:Pythonでバイナリ関数の確率を計算する方法は?

$f(x)=\begin{cases} 0,& \Pr(f(x)=0)=x \\ 
1,& \Pr(f(x)=1)=1-x\end{cases}$, 

where $0< x< 1$ 

裁判:
私は次のコードで試してみましたが、私は、それが正しいかどうか分かりません。コードはここにあります:

import random 
def f(x): 
    b=random.randint(0,1) 
    return b 

x=0.3 
count0=0 
count1=0 
for i in range(1000): 
    if f(x)==0: 
     count0=count0+1 
    else: 
     count1=count1+1 
print 'pr(f(x)=0)=', count0*1.0/1000 
print 'pr(f(x)=1)=', count1*1.0/1000 

私のコードは正しい計算をしていますか?助けてください?

+0

それはあなたが達成したいかによって異なりますか? –

+0

植字式は[this](// i.imgur.com/zmKZMsw.png)のように見えますか?したがって 'x'の確率で' 0'、そうでなければ '1'ですか? – Artyer

+0

定義された関数に相当するPythonコードは何ですか? @EmmanuelMtali – MKS

答えて

0

あなたはxがその数よりも大きい場合は、ちょうどチェックして、[0, 1)から乱数を返しrandom.random、「1 - xの確率でxの確率で0と1を」言うことを意味している場合:

import random 

def f(x): 
    return x >= random.random() 

現在、関数は01を50/50のチャンスで返します。

+0

私はrandom.randint(0,1)を使用しています。これは$ 0 $または$ 1 $を無作為に@Artyer – MKS

+0

@MKSに返すもので、偶然の確率は '0'または' 1'です。この関数は 'x'を考慮に入れます。 – Artyer

+0

私のpythonコードは、関数に応じて正しい確率を与えていないようです。 – MKS

0

はい、あなたのコードは、(あなたがNf(x)がを呼び出して作成した二項分布に基づいて)正解を行います。

ただし、(0,1)からランダムに0または1を選択する確率は50/50ですが、確かに気づいたように、与えられたサンプルの確率を計算しています(例[1、 1、1、0])であり、無限の時間f(x)を呼び出す宇宙全体ではない。

参照:Binomial distributionその後

intents = [] 
num_intents = 1000 

for i in range(num_intents): 
    intent.append(f(x)) 

:あなたはこのようなリスト内の関数の結果を格納する場合

あなたがより読みやすいコードを書くことができ

print('pr(f(x)=0)={}'.format(intents.count(0)/num_intents) 
print('pr(f(x)=1)={}'.format(intents.count(1)/num_intents) 

を私はまたnumpyと二項を探求することをお勧めいたします配布、numpy.random.binamial

関連する問題