我需要在我选择的分发后绘制随机数字。
示例:使用这些概率从1到7绘制7个数字:
因为在我的实际应用中,我需要绘制潜在的1000个数字,我需要这个数字尽可能高效(理想情况下是线性的)。 我知道MATLAB中有一个函数可以从正态分布中提取随机数;有什么方法可以适应它吗?
答案 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);