如何使用Matlab'从分类分布中获取随机样本;s兰德()?

如何使用Matlab'从分类分布中获取随机样本;s兰德()?,matlab,random,Matlab,Random,我想根据简单的分类概率分布生成样本,例如 p(A) = 0.1 p(B) = 0.5 p(C) = 0.25 p(D) = 0.15 使用rand(),它可以均匀地生成(0,1)中的样本,实现这一点的最佳方法是什么?您只需检查随机数是否小于每个类别的概率,按概率增加的顺序: value=rand() 如果值

我想根据简单的分类概率分布生成样本,例如

p(A) = 0.1
p(B) = 0.5
p(C) = 0.25
p(D) = 0.15

使用rand(),它可以均匀地生成(0,1)中的样本,实现这一点的最佳方法是什么?

您只需检查随机数是否小于每个类别的概率,按概率增加的顺序:

value=rand()
如果值
在不了解更多代码的情况下,我无法真正告诉您将它们整理好的最佳方法。如果您只有少数情况不会改变,那么像我上面所做的那样手动硬编码一次可能是最简单的

编辑:现在我想起来了,因为我们在累积概率,所以它们的顺序并不重要。我已经相应地调整了代码


编辑:我认为这基本上就是工作原理。

您可以检查随机数是否小于每个类别的概率,按概率增加的顺序:

value=rand()
如果值
在不了解更多代码的情况下,我无法真正告诉您将它们整理好的最佳方法。如果您只有少数情况不会改变,那么像我上面所做的那样手动硬编码一次可能是最简单的

编辑:现在我想起来了,因为我们在累积概率,所以它们的顺序并不重要。我已经相应地调整了代码


编辑:我认为这基本上就是工作原理。

可能重复的可能重复是的,基本上我不在循环中,并保持概率的“当前”和,一旦总和高于随机“值”,我选择了这个事件。是的,基本上我不在循环中并保持“当前”概率的总和,一旦总和高于随机“值”,我选择了这个事件。
value = rand()
if value < p(A) 
    return A
if value < p(A)+p(B) 
    return B
if value < p(A)+p(B)+P(C) 
    return C
else            
    return D