Matlab - 计算向量中每个元素的概率

Sim*_*mon 4 matlab

我有一个y可能具有以下形式的向量:

y = [1 1 1 1 2 2 2 2 1 1 3 3 4 5]

并且我希望将一个概率附加到内部的每个元素,y因为它将由随机变量生成.在这种情况下,元素1的概率为6/14,元素2的概率为4/14,元素3的值为2/14,元素4和5的值为1/14.

基本上,结果应如下所示:

prob_y = 1/14 * [6 6 6 6 4 4 4 4 6 6 2 2 1 1]

有没有办法没有任何forwhile循环这样做?

b3.*_*b3. 5

可以使用UNIQUE函数确定输入向量中的唯一元素.然后,您可以使用ARRAYFUN和一个匿名函数获取所需的输出,该函数检查输入向量中每个唯一元素的数量:

>> y = [1 1 1 1 2 2 2 2 1 1 3 3 4 5];
>> prob_y = arrayfun(@(x)length(find(y==x)), unique(y)) / length(y)

prob_y =

    0.4286    0.2857    0.1429    0.0714    0.0714