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

10-06 04:55