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

时间:2010-07-06 12:04:10

标签: matlab

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

2 个答案:

答案 0 :(得分:4)

创建一个50x30k的随机值矩阵

values = rand(50, 30000)

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

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

答案 1 :(得分:4)

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

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

修改
关于你在Mau的答案下提出的问题:
不,您不需要自己编制索引。让Matlab为你做。
例如,如果您需要重复以下操作50次:

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

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

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

说明: 每一行都是您想要计算的单个矢量:

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

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