Matlab 如何生成具有不同问题的向量。每个元素的分布

Matlab 如何生成具有不同问题的向量。每个元素的分布,matlab,for-loop,Matlab,For Loop,我需要生成N个值为1-6的向量r(它们可以是重复的),以给定N个元素的排列p。但是这些值是根据排列的第i个值以某种概率分布生成的 例如,我有排列p=[2 3 1 4]和概率分布矩阵(Nx6):Pr=[1,0,0,0,0,0,0;0,0.5,0,0.5,0,0,0;0,0,0,0,1,0,0;0.2,0.2,0.2,0.2,0] 第i行表示问题。排列p中元素i的值1-6的分布(其值,而非位置),行的总和为1 例如,我们可以将值1赋给值1,将值2或4赋给值2,等等。因此它可以如下所示:r=[2 4

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

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

第i行表示问题。排列p中元素i的值1-6的分布(其值,而非位置),行的总和为1

例如,我们可以将值1赋给值1,将值2或4赋给值2,等等。因此它可以如下所示:r=[2 4 1 2]或r=[4 1 5]

目前我正在使用此代码:

for i = 1:N 
   r(i) = randsample(1:6,1,true,Pr(p(i),:));
end
但是它非常慢,我试图避免for循环,可能是通过函数bsxfun或类似的方法


请问有人有什么线索吗?:-)

问题的解决方案是,您的案例所需的一切都是用矩阵替换向量
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);