我正在生成由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
答案 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%。