在Matlab中生成随机二维点

时间:2013-11-25 20:11:20

标签: matlab

我是Matlab的新手,我正在尝试根据高斯(正态)分布和均匀分布生成二维随机数。假设我想创建一个2个不同的数据集(高斯(1800对)和统一(1200对)),它将用于数据挖掘任务/算法(过度拟合二维数据)示例。

其他重要问题是数据点应在0-20范围内。

我试过这个用于高斯分布

SIGMA = [.5 .05; .05 .5 ];
temp = mvnrnd([-3 0], SIGMA,1800);

这些代码生成-5到5之间的数字,我想生成0-20所以我试过

SIGMA = [0 20];

但我的范围是-20到20

如何获得0-20的范围?

2 个答案:

答案 0 :(得分:3)

Gaussian_r=10+(10/3)*randn(1800,1)

这里我使用了3 sigma规则,其中99.7%的随机变量将落在均值 - 西格玛到均值+ 3西格玛之间,这意味着如果不足够的话,仍有0.3%可能落在你指定的区域之外你可以让西格玛变小吗

Uniform_r = 20*rand(1200,1)  

如果您希望这些是整数,请使用randi

检查randn randi rand

答案 1 :(得分:1)

统一: r =兰迪(20,2,1200)

高斯: 函数randn是高斯分布,标准偏差(sigma)= 1,平均值(mu)= 0.真正的正态分布不限于一个区间,当你从均值进一步时,事件的概率就会降低。随着样本量的增大,获得极值的可能性也会增加。假设你希望你的分布集中在(平均值)大约10,你可以选择一个适当的小sigma来使1800个样本中的异常值变得非常不可能,然后再确保它不会发生条件。

如果你在6sigma范围内有3600个样本,那么样本在外面的可能性非常小(7.1e-4%你可以在MATLAB中用1-erf(6 / sqrt(2))^ 3600看到这个)。所以一个合理的sigma可能是10/6(1.6667)。这给了我们:

r = 10 + 1.6667 * randn(2,1800) %以防万一 r(r> 20)= 20; r(r <0)= 0;

http://en.wikipedia.org/wiki/Normal_distribution