我正在生成一个由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
Run Code Online (Sandbox Code Playgroud)
首先,您不需要循环来生成0和1的随机字符串.试试这个:
individual = randi([0 1],[attrCount,1]);
Run Code Online (Sandbox Code Playgroud)
其次,再次,您不需要循环来构建您的population
单元格.试试这个:
population=arrayfun(@(x)randi([0 1],[attrCount,1]),1:individualsCount,'UniformOutput',false)
Run Code Online (Sandbox Code Playgroud)
您可能必须更改行和列的顺序,具体取决于您要如何设置它.
现在,提出你的问题,你应该明白,这些分布是随机的,只有当你的样本量接近无穷大时,才会接近50%1s和50%0s的真正均匀分布.如果你attrCount
的足够小,如果你没有找到接近50%的数字,不要感到惊讶.这并不意味着它是错的.就是这样.
以下是不同样本大小的随机二进制向量的1s分布.您可以看到,对于小样本量,存在高度可变性(并且绝不是这样......每次都会有所不同),而当您开始接近1000以上的大样本时,您的1s分布得到越来越接近50%,最终在无限远时正好是50%.