0

我有这种类型的数据:

         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
4

1 回答 1

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
于 2013-07-04T07:33:22.443 回答