我正在生成一组由 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% 1 和 50% 0 的真正均匀分布。如果您的 attrCount
足够小,如果您没有找到接近 50% 的数字,请不要感到惊讶。这并不意味着它是错误的。就是这样。
对于不同样本大小的随机二元向量,1 的分布如下所示。您可以看到,对于小样本量,存在很大的可变性(绝不是这样准确......每次都会不同),而当你开始接近 1000 及以上的大样本量时,你的 1s 分布得到越来越接近 50%,最终在无穷远处刚好是 50%。
关于matlab - 在MATLAB中使用randi获取随机值: values are not distributed uniformly,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7729185/