【问题标题】:Binary vector with specified probability density具有指定概率密度的二进制向量
【发布时间】:2014-04-07 11:36:44
【问题描述】:

假设我正在使用二进制向量 {0,1}。 我只想将 p=[0,1] 之类的输入参数作为输入参数,并具有与给定概率相对应的确切数量的零(给定向量的长度,例如“N”),我应该将它们按随机顺序排列.

例如,对于 p=0.5 和 N=8,我想要 [0 0 1 0 1 1 0 1] 或 [1 1 0 0 1 0 0 1] 之类的东西,重要的是要有 50以随机顺序排列的零的百分比。如有必要,它应该在无法表示时进行舍入(即 p=0.200034 和 N=8)。

我做了 X = (rand(1,N)

谢谢

【问题讨论】:

    标签: matlab probability information-theory


    【解决方案1】:

    你可以计算个数,n;用n 个和N-n 个零构建一个向量(按此顺序);然后随机排列该向量:

    p = .5;
    N = 8;
    
    n = round(N*p); %// desired number of ones
    result = [ ones(1,n) zeros(1,N-n) ]; %// n ones and N-n zeros
    result = result(randperm(N)); %// random order
    

    【讨论】:

    • 两者都是很好的解决方案,但我选择这个是因为我已经实现了这个。谢谢!
    【解决方案2】:

    您可以使用randsample 勒索从向量中抽取k = round( N * p ) 条目并将它们设置为1:

    function v = myBinSample( p, N )
    k = round( p * N );
    idx = randsample( N, k );
    v = zeros(1, N);
    v( idx ) = 1;
    

    【讨论】: