生成0和1,概率为25%和75

时间:2017-03-31 12:59:40

标签: matlab bitwise-operators

我在一个网站上看到了以下问题:

 how to  generate 0 and  1  with 25% and  75% probability, here is corresponding code in c++

int rand50()
{
    // rand() function will generate odd or even
    // number with equal probability. If rand()
    // generates odd number, the function will
    // return 1 else it will return 0.
    return rand() & 1;
}
 bool rand75()
{
    return rand50() | rand50();
}

但遗憾的是我无法做到

>> bitand(rand,1)
Error using bitand
Double inputs must have integer values in the range of ASSUMEDTYPE.

因此我使用了以下算法 1. rand50

function boolean=rand50()

        probability=rand;

        if  probability <=0.5
            boolean=0;
        else
            boolean=1;
        end

        end

2.rand75

function  boolean=rand75()
boolean=bitor(rand50(),rand50());

end

我认为它们是对的?或者至少是近似的

1 个答案:

答案 0 :(得分:2)

C / C ++中的

rand返回整数,而在MATLAB中,它在double0之间返回1。如您所示,您可以构建一个函数,使用true以相等的概率为您提供false0.5的值,尽管它可以缩写为:

function bool = rand50()
    bool = rand() < 0.5;
end

话虽这么说,我想我会建议稍微修改你的函数来接受一个维度作为输入,这样你就可以一次生成任意数量的随机样本。然后,您可以测试输出以确保它符合预期

function bool = rand50(sz)
    bool = rand(sz) < 0.5;
end

function bool = rand75(sz)
    bool = rand50(sz) | rand50(sz);
end

现在我们可以测试一下这个

samples = rand75([10000, 1]);
mean(samples)
%   0.7460

现在,如果您忽略了您已经显示的代码,那么生成具有给定频率的随机数的更好方法是创建一个函数,您可以在其中指定0或1的百分比。您想要的并使用它来与rand

的输出进行比较
function bool = myrand(sz, percentage)
    bool = rand(sz) < percentage;
end

% Get 10 samples with 25% 1's
values = myrand([10, 1], 0.25);