我想以给定的概率生成一个随机数,但不确定如何:
我需要一个介于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个段,其中每个段的长度与其对应的长度成比例可能性。就您而言,您将拥有: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/