在自定义分布后绘制随机数

时间:2014-03-14 18:46:42

标签: performance matlab random distribution probability

我需要在我选择的分发后绘制随机数字。

示例:使用这些概率从1到7绘制7个数字:

  • 1:0.3
  • 2:0.2
  • 3:0.15
  • 4:0.15
  • 5:0.1
  • 6:0.05
  • 7:0.05

因为在我的实际应用中,我需要绘制潜在的1000个数字,我需要这个数字尽可能高效(理想情况下是线性的)。 我知道MATLAB中有一个函数可以从正态分布中提取随机数;有什么方法可以适应它吗?

4 个答案:

答案 0 :(得分:7)

认为您也可以使用统计工具箱中的randsample作为引用here

%%// Replace 7 with 1000 for original problem
OUT = randsample([1:7], 7, true, [0.3 0.2 0.15 0.15 0.1 0.05 0.05]) 

答案 1 :(得分:1)

numbers = 1:7;
probs = [.3 .2 .15 .15 .1 .05 .05];
N = 1000; %// how many random numbers you want

cumProbs = cumsum(probs(:)); %// will be used as thresholds
r = rand(1,N); %// random numbers between 0 and 1
output = sum(bsxfun(@ge, r, cumProbs))+1; %// how many thresholds are exceeded

答案 2 :(得分:1)

您可以使用来自matlab文件交换的gendist:http://www.mathworks.com/matlabcentral/fileexchange/34101-random-numbers-from-a-discrete-distribution/content/gendist.m

这会生成1000个随机数: gendist([.3,.2,.15,.15,.1,.05,.05],1000,1)

答案 3 :(得分:0)

如果你没有randsample,你可以像内部一样使用histc,只是没有任何毛病:

N = 100;
nums = 1:7;
p = [.3 .2 .15 .15 .1 .05 .05];

cdf = [0 cumsum(p(:).'/sum(p))]; cdf(end)=1; %' p is pdf
[~, isamps] = histc(rand(N,1),cdf);
out = nums(isamps);