matlab - 在MATLAB中使用randi获取随机值: values are not distributed uniformly

标签 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

最佳答案

首先,您不需要循环来生成由 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%。

enter image description here

关于matlab - 在MATLAB中使用randi获取随机值: values are not distributed uniformly,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7729185/

相关文章:

matlab - 使用 Matlab 内核在 Jupyter 中绘制更大的内联图

c# - 随机生成敌人 XNA 4.0 (WP7)

c - 如何在c中生成设定范围内具有均匀间隔的随机值

java - 请解释一下 seed 在 java.util 类 Random 中的作用

image - 正确的图像马赛克图像尺寸

performance - 在 Matlab 中有效计算成对平方欧氏距离

c++ - 如何在每次迭代中随机生成一个字符串?

random - 在内核模块中获取/dev/random

maps - 在 Matlab GUI 中设置 map 轴的父级

matlab - 自己的快速傅里叶变换算法的实现不起作用