【问题标题】:How to generate vector with different prob. distributions for each element如何生成具有不同概率的向量。每个元素的分布
【发布时间】:2016-02-20 01:06:27
【问题描述】:

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

例如我有排列 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 行代表概率。值 1-6 到排列 p 中的元素 i 的分布(它的值,而不是位置),行的总和为 1。

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

目前我正在使用此代码:

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

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

请问有人知道吗? :-)

【问题讨论】:

    标签: matlab for-loop


    【解决方案1】:

    您的问题的解决方案是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);
    

    【讨论】: