生成具有均值、标准差和样本数的数据集

Generating dataset with mean, std dev, and number of samples

我正在尝试使用以下参数生成二维数据集:

x= N(-5,1) y= N(0,1) n= 1000

其中 N(平均值,标准差)和 n = 样本数。

我试过了:

x = normrnd(-5, 1, [100,10]) 
y = normrnd(0,1,[100,10])

生成具有适当值的 100 x 10 数组。我现在需要找到一种方法,将这两个数组的值输出为 Weka 可以分析的 N(x,y) 格式。任何有关如何执行此操作的建议将不胜感激。

你可以使用 mvnrnd(mu_vector, sigma_matrix)

mu = [-5;0];
Sigma = [1,0;0,1];
n = 1000;
X = mvnrnd(mu, Sigma, n);

根据您的评论,您想要生成一个 N x 2 矩阵,其中每一行都是一对来自不同正态分布的值。

您可以分别生成每个的二维矩阵并将它们展开成单个向量并将它们连接起来....或者最简单的方法是只在每个分布的一维向量中生成 100 x 10 = 1000 个元素并将它们连接在一起。

方法 #1 - 二维矩阵展开

x = normrnd(-5, 1, [100,10]);
y = normrnd(0, 1, [100,10]);

N = [x(:) y(:)];

方法 #2 - 一维向量连接

x = normrnd(-5, 1, [1000,1]); %// Change
y = normrnd(0, 1, [1000,1]); %// Change

N = [x y];

如果您想将其写入 CSV 文件,其中有一对 x,y 值,用逗号分隔,最后有 Class_A,请调用 fopen to open up a file for writing, fwrite to write our stuff to the file and fclose 来最终关闭文件是必要的。您还要求数字是 3 位精度。想到这样的事情:

f = fopen('numbers.csv', 'w'); %// Open up the file
fprintf(f,'%.3f,%.3f,Class_A\n', N.'); %'// Write the data
fclose(f); %// Close the file

仔细看第二条语句很重要。请注意,我正在编写 Ntranspose,因为 MATLAB 按列优先顺序写入值。这意味着如果您希望将行写入文件,则必须转置矩阵才能做到这一点。 numbers.csv 是写入文件时调用的文件。如果您现在检查此文件,您会发现它采用 x,y,Class_A 的形式,其中 x,y 是来自两个正态分布的一对值。