生成具有特定比率的随机二进制序列

时间:2015-06-18 17:43:59

标签: arrays matlab random

我想生成一个比率为50%的随机二进制序列,即0和1的相同数量。这就是我到目前为止所做的:

length_sequence = 1000;
ratio = 0.5;
A = logical(randi([0 1],length_sequence,1));

唯一的问题是我不知道如何设定比率。

2 个答案:

答案 0 :(得分:3)

比率可以解释为确定性(您希望在1000个值的每个实现中有500个零和500个零)或概率(实现可能比零,但该比率适用于大量的实现)。

您的代码适用于概率解释,所以我假设您的意思是确定性的。在这种情况下,用任意顺序的零和一个值填充<button id="this-button" onclick="buttonClicked();"> (例如:首先是所有的,然后全部为零),然后应用随机排列:

A

答案 1 :(得分:3)

您可以通过以下两种方式之一来解决这个问题(àLaLuis Mendo):

方法#1 - 确定性

如果您知道每次创建此向量时需要正好500个零和500个零,则可以生成1到1000之间的集合索引(或者通常从1到多个元素生成如你所愿 - num_elements)并提取500(或一般round(ratio*num_elements),其中ratio[0,1]之间)。然后,您可以使用这些索引并将初始零向量中的位置设置为1:

num_elements = 1000;
ratio = 0.5; %// 50%
ind = randperm(num_elements, round(ratio*num_elements));
A = zeros(num_elements,1) == 1; %// Convert to logical
A(ind) = 1;

方法#2 - 概率

您可以从[0-1]生成均匀分布的随机值,使用0.5生成阈值,或ratio

num_elements = 1000;
ratio = 0.5;
A = rand(num_elements, 1) >= ratio;

在概率意义上,这将向量中的每个值填充50%(或一般ratio)机会使值0和50%(或一般1 - ratio)机会使值为1。