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

如何在不使用循环的情况下有效地创建大型随机向量?

  •  5
  • SKM  · 技术社区  · 14 年前

    Problem语句:-我想创建包含随机实数(float)的向量(1维)的50个实例。数组大小(一维)为30000。如何继续,以使开销最小或复杂性最小?

    2 回复  |  直到 14 年前
        1
  •  4
  •   Gacek    14 年前
    N = 30000; %// length of your vectors
    I = 50; %// number of instances
    v = rand(I, N); 
    

    在上面的示例中,您将生成一个矩阵,其中每一行都是一个向量。随机数以均匀分布生成(对于高斯分布,使用 randn )

    如果需要单独创建每个实例,请使用循环:

    for i=1:I
        v = rand(1, N);
        %// do something with v
    end
    

    但如果我是你的话,我就不会用这个了(速度慢,不太清楚)。

    编辑 :
    关于你在茂的回答下的问题:
    不,你不需要自己做索引。让matlab帮你做。
    例如,如果需要重复以下操作50次:

     x1 = sigma*y + beta * vect1;
     ...
     x50 = sigma*y + beta * vect50;
    

    假设 y 是大小为1x3000的向量,可以用一行计算:

    X = sigma*repmat(y, 50, 1) + beta * rand(50, 30000);
    

    说明: 每行都是要计算的单个向量:

    X(1,:) = x1;
    ...
    X(50,:) = x50;
    

    repmat(y,50,1) 重复你的 Y 第一维向量50次(行)

        2
  •  4
  •   Mau    14 年前

    创建一个50x30K随机值矩阵

    values = rand(50, 30000)
    

    然后每行将是一个30K值的随机向量

     aVector = values(3,:)  % Row 3, all columns