代码之家  ›  专栏  ›  技术社区  ›  Clopen

使用平均值、标准偏差和样本数生成数据集

  •  0
  • Clopen  · 技术社区  · 10 年前

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

    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阵列。我现在需要找到一种方法,将这两个数组的值输出为N(x,y)格式,Weka可以对其进行分析。对于如何做到这一点,任何建议都将不胜感激。

    2 回复  |  直到 10 年前
        1
  •  0
  •   rayryeng    10 年前

    给定您的评论,您希望生成 N x 2 矩阵,其中每一行是来自不同正态分布的一对值。

    您可以分别生成每一个的2D矩阵,并将它们展开为单个向量,然后将它们连接起来……或者最简单的方法是只生成 100 x 10 = 1000 并将这些元素连接在一起。

    方法#1-2D矩阵展开

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

    方法#2-1D矢量拼接

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

    如果您希望将其写入CSV文件 x,y 用逗号分隔的值 Class_A 最后,给 fopen 打开文件进行写入, fwrite 把我们的东西写进文件 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
    

    仔细看第二个陈述很重要。注意,我正在编写 转置 属于 N 因为MATLAB按列主顺序写入值。这意味着,如果要将行写入文件,则必须将矩阵转置。 numbers.csv 是写入文件时调用的名称。如果您现在检查此文件,您将看到它的形式为 x,y,Class_A 哪里 x、 年 是两个正态分布的一对值。

        2
  •  0
  •   Odedy    10 年前

    可以使用mvnrnd(mu_vector,sigma_matrix)

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