我需要生成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或类似的东西。
有人有任何线索吗? : - )
答案 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);