【问题标题】:How to generate a probability vector?如何生成概率向量?
【发布时间】:2014-12-12 22:37:21
【问题描述】:

我想生成一个遵循某个已知分布的概率向量。

例如,当我希望分布均匀时,我可以在 MATLAB 中进行:

N     = 5;
proba = (1/(N))*ones(1, N);

如果我想使用泊松分布或二项分布怎么办?

【问题讨论】:

    标签: matlab random probability


    【解决方案1】:

    如果您正在寻找使用内置 MATLAB 函数的解决方案,您可以查看random,它允许您为多种类型的知名分布提供参数。

    例如,如果您想从具有n 试验和p 成功机会的二项分布中绘制值的M x N 矩阵:

    n=3; p=0.5; M=20; N=1;
    random('Binomial',n,p,[M,N]) 
    


    如果您有自己创建的(离散)概率分布,并将 PMF 作为向量给出,您可以通过使用r=rand()[0,1] 上的均匀分布生成随机数r 从中采样然后选择 CMF 中大于 r 的第一个 bin。

    x   = [  0   1   2   3  ];
    PMF = [0.25 0.2 0.5 0.05];
    CMF = cumsum(PMF);
    N = 10000;
    valuesDrawn = zeros(N,1);
    for i = 1:N
        r = rand();
        for j = 1:length(PMF)
            if r < CMF(j)
              valuesDrawn(i) = x(j);
              break;
            end
        end
    end
    
    hist(valuesDrawn);
    

    【讨论】: