【问题标题】:Probability generation in MatlabMatlab中的概率生成
【发布时间】:2012-11-18 18:07:20
【问题描述】:

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

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

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

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

【问题讨论】:

  • 为什么不生成一个介于 0 和 1 之间的随机数,然后将其转换为您想要的类?
  • 谢谢,很抱歉我没有把我的问题说得很清楚。请看修改后的版本。

标签: matlab random


【解决方案1】:

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

cumP = cumsum (P);
ind = find(cumP>rand, 1, 'first');
sol = P(ind);

【讨论】:

    【解决方案2】:
    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 是输出。

    【讨论】:

    • 谢谢。现在,我如何在不知道变量数量的情况下做同样的事情?对不起,我没有把我的问题说得很清楚。我已经编辑过了。
    【解决方案3】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-12-06
      • 1970-01-01
      • 2012-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-02
      相关资源
      最近更新 更多