在MATLAB中使用randi来获取随机值:值不是均匀分布的

时间:2011-10-11 16:14:59

标签: matlab random

我正在生成由0和1组成的随机字符串。我正在使用randi(2)-1来获取随机生成的单个值0或1.我希望得到1几乎与0一样频繁。相反,当我查看人口中的所有人时,他们大多数是1。下面是代码 - 出了什么问题?

for iInd=1:individualsCount
    individual(attrCount) = 0;

    for i=1:attrCount
         individual(i) = randi(2)-1;
    end

    population{iInd} = individual;
end

1 个答案:

答案 0 :(得分:8)

首先,您不需要循环来生成0和1的随机字符串。试试这个:

individual = randi([0 1],[attrCount,1]);

其次,您不需要循环来构建population单元格。试试这个:

population=arrayfun(@(x)randi([0 1],[attrCount,1]),1:individualsCount,'UniformOutput',false)

您可能需要更改行和列的顺序,具体取决于您的设置方式。


现在,提出你的问题,你应该明白,这些分布是随机的,只有当你的样本量接近无穷大时才接近50%1s和50%0s的真正均匀分布。如果您的attrCount足够小,如果您没有找到接近50%的数字,请不要感到惊讶。这并不意味着它是错的。就是这样。

以下是不同样本大小的随机二进制向量的1s分布。您可以看到,对于小样本量,存在高度可变性(并且绝不是这样......每次都会有所不同),而当您开始接近1000以上的大样本时,您的1s分布得到越来越接近50%,最终在无限远时正好是50%。

enter image description here