我想以给定的概率生成一个随机数,但不确定如何:

我需要一个介于1到3之间的数字

num = ceil(rand*3);

但我需要不同的值才能产生不同的概率,例如
0.5 chance of 1
0.1 chance of 2
0.4 chance of 3

我敢肯定这很简单,但我想不出该怎么做。

最佳答案

一个简单的解决方案是生成一个具有均匀分布的数字(使用 rand ),并对其进行一些操作:

r = rand;
prob = [0.5, 0.1, 0.4];
x = sum(r >= cumsum([0, prob]));

或单线:
x = sum(rand >= cumsum([0, 0.5, 0.1, 0.4]));

说明

这里r是一个介于0和1之间的均匀分布的随机数。要生成介于1和3之间的整数,诀窍是将[0,1]范围划分为3个段,其中每个段的长度与其对应的长度成比例可能性。就您而言,您将拥有:
  • 段[0,0.5),对应于数字1。
  • 段[0.5,0.6),对应于数字2。
  • 段[0.6,1],对应于数字3。
  • r落在任何段中的概率与每个数字所需的概率成正比。 sum(r >= cumsum([0, prob]))只是将整数映射到段之一的一种理想方法。

    延期

    如果您对创建随机数的 vector /矩阵感兴趣,可以使用循环或 arrayfun :
    r = rand(3); % # Any size you want
    x = arrayfun(@(z)sum(z >= cumsum([0, prob])), r);
    

    当然,还有矢量化解决方案,我太懒了,无法编写它。

    关于matlab - 用给定的概率生成随机数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13914066/

    10-12 15:37