查找向量中每个元素出现的概率

时间:2013-07-04 07:28:55

标签: matlab

我有这种类型的数据:

         1
         2
         3
         3
         4
         1

现在,我想维护两个独立的数组: 一个将保留上述数字,另一个将保持相应的概率

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

我已经编写了以下代码,但它打印出所有6个数字,即1 2 3 3 4 1,并且它们的可用性是统一的。 请帮助我在下面给出的代码中犯错误

 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

1 个答案:

答案 0 :(得分: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