2017-06-15 78 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)?所以'0'的概率是'x',否則'1'? – Artyer

+0

定義函數的等效Python代碼是什麼? @EmmanuelMtali – MKS

回答

0

如果你的意思是說「0與x的概率,和1的1 - x概率」,random.random[0, 1)返回一個隨機數,所以你只要檢查x比這個數字更大:

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

是的,你的代碼不正確的解決方案(基於您創建調用ñ次二項分佈F(X))。然而,從(0,1)中隨機選擇0或1的概率是50/50,但是,正如你已經注意到的那樣,你正在計算給定樣本的概率(例如[1, 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