如何生成具有不同概率的向量。每个元素的分布

时间:2015-11-18 10:32:09

标签: matlab for-loop

我需要生成N值为1-6的向量r(它们可以是重复的)给定N个元素的置换p。但是这些值是根据置换的第i个值以一些概率分布生成的。

E.g。我有排列p = [2 3 1 4]和概率分布矩阵(Nx6):Pr = [1,0,0,0,0,0; 0,0.5,0,0.5,0,0; 0,0,0,1,0,0; 0.2,0.2,0.2,0.2,0.2,0]

第i行表示概率。在排列p中将值1-6分配给元素i(其值,而不是位置),行的总和为1.

例如,我们可以将值1分配给值1,将值2或4分配给值2等。所以它看起来像这样:r = [2 4 1 2]或r = [4 4 1 5]。< / p>

目前我正在使用此代码:

for i = 1:N 
   r(i) = randsample(1:6,1,true,Pr(p(i),:));
end

但它很慢,我试图避免for-cycle,可能是通过函数bsxfun或类似的东西。

有人有任何线索吗? : - )

1 个答案:

答案 0 :(得分:0)

问题的解决方案是basically available in this answer,您的案例所需的一切都是用矩阵替换向量prob并修复所有操作以便在矩阵上正常工作。

Pr=[1, 0, 0, 0, 0, 0; 0, 0.5, 0, 0.5, 0, 0; 0, 0, 0, 1, 0, 0; 0.2, 0.2, 0.2, 0.2, 0.2, 0];
p = [2 3 1 4];
prob=Pr(p,:);
r=rand(size(pPr,1),1);
x=sum(bsxfun(@ge,r,cumsum(padarray(prob,[0,1],'pre'),2)),2);