1

我想创建一个概率生成器,它将根据先验概率在一定数量的选项之间进行选择。例如,假设我想根据以下先验概率在 A、B 和 C 之间进行随机选择:

P(A) = .4
P(B) = .5
P(C) = .1

那么,如何创建一个随机生成器,它将根据上述概率随机生成 A、B 或 C?

编辑:对不起,我忘了补充项目的数量,它们的概率并不总是相同的。所以,它不会总是像上面那样只有三个项目。它将是一个 Mx2 矩阵,其中 M 是项目数,第二列(概率)的总和为 1。

4

3 回答 3

3

我很困惑,但你的意思是 M,但如果 P 是概率矩阵,这是我的看法:

cumP = cumsum (P);
ind = find(cumP>rand, 1, 'first');
sol = P(ind);
于 2012-11-18T18:33:58.430 回答
1
p=rand;
probs_vector=[.4 .5 .1];
current_prob=probs_vector(1);
index=1;
while (current_prob<p)
    index=index+1;
    current_prob=current_prob+probs_vector(index)
end

需要进行一些基本检查以确保向量加起来为 1 而不是更高/更低,以防止无限循环等,但我将把这些细节留给你。index是输出。

于 2012-11-18T18:10:12.630 回答
0

如果 P 是长度为 N 的概率向量,那么您可以使用一行代码从中返回一个样本:

out = 1 + sum( rand() > cumsum(P) );

这将根据 P 中的概率返回一个从 1 到 N 的整数。

于 2012-11-18T21:22:15.377 回答