2013-07-04 47 views
0

我有這種類型的數據:查找每個元素的出現概率在載體

  1 
     2 
     3 
     3 
     4 
     1 

現在,我要維護兩個單獨的陣列: 一個將保持上面的數字和其他將保持thier相應的概率

values  values_counter (proabability) 
    1      2/6 
    2      1/6 
    3      2/6 
    4      1/6 

我寫了下面的代碼,但它打印出所有的6個數字,即1 2 3 3 4 1和它們作爲均勻proabilities。 請幫我在哪裏,我提出以下

values=[]; 
values_counter=[]; 
for d=1:1:648 
size_of_array=size(values); 
values_array_size=size_of_array(2); 

if(values_array_size~=0) 

for b=1:1:values_array_size 
    if (columnB(d)~=values(b)) 
     values(values_array_size+1)=columnB(d); // columnB(d) has different values (may have duplicate values) 
     dfastates_counter(values_array_size+1)=1/648; 
    else 
     values_counter(b)=(values_counter(b)+1)/648; 
    end 
end 

else 
    values(1)=columnB(d); 
    values_counter(1)=1/648; 
end 

end 


    values 
    values_counter 
+0

的概率之和應不超過1 – mbm

+0

@mbm我認爲,分母在該示例中,所有的概率恰好應該是'6' – Dan

+0

其實在我的數據集總共有648個值。我只是把這個作爲一個例子,如果我有6個值... – Xara

回答

6

恐怕你的代碼是太令人費解給在代碼中的錯誤。你基本上是試圖找到一個直方圖,因此,雖然我不會告訴什麼是你的代碼錯誤,這裏是正確的方式做到這一點在Matlab:

x = [1;2;3;3;4;1] 
egdes = unique(x) 
histc(x, edges)/numel(x) 

我不知道你在何處獲得雖然在你的問題的概率...

ans = 

    0.3333 
    0.1667 
    0.3333 
    0.1667 
+0

我可能沒有深入地閱讀你的答案,對不起。 – Adiel

+0

我已經從excel文件中獲得了總共648個值,使用這個函數columnB = xlsread(filename,'B:B');我只是在histc中傳遞columnB(就像在你的情況x中那樣)? – Xara

+0

@Adiel沒問題;) – Dan