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

SKM*_*SKM 5 matlab

问题陈述: - 我想创建50个矢量实例(1维),其中包含随机实数(浮点数).数组大小(1维)将说3万.我如何进行以便开销最小或复杂性最小?

Gac*_*cek 4

N = 30000; %// length of your vectors
I = 50; %// number of instances
v = rand(I, N); 
Run Code Online (Sandbox Code Playgroud)

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

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

for i=1:I
    v = rand(1, N);
    %// do something with v
end
Run Code Online (Sandbox Code Playgroud)

但如果我是你,我就不会使用它(它更慢而且恕我直言不太清楚)。

编辑
关于你在毛的回答下的问题:
不,你不需要自己索引它。让 Matlab 为您做这件事。
例如,如果您需要重复以下操作50次:

 x1 = sigma*y + beta * vect1;
 ...
 x50 = sigma*y + beta * vect50;
Run Code Online (Sandbox Code Playgroud)

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

X = sigma*repmat(y, 50, 1) + beta * rand(50, 30000);
Run Code Online (Sandbox Code Playgroud)

解释:每一行都是您想要计算的单个向量:

X(1,:) = x1;
...
X(50,:) = x50;
Run Code Online (Sandbox Code Playgroud)

repmat(y,50,1)y在第一维(行)中重复向量 50 次