查看单个帖子
旧 2019-12-10, 20:42   #1
poster
高级会员
 
注册日期: 2019-11-21
帖子: 3,006
声望力: 66
poster 正向着好的方向发展
帖子 如何在不求助于循环的情况下有效地创建大型随机向量?

问题陈述:-我想创建一个包含随机实数(浮点数)的vector(1维)的50个实例。数组大小(一维)将为3万,我该如何进行操作以使开销最小或复杂度最小?



回答:

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是大小为1x30000的向量,则可以在一行中进行计算:

X = sigma*repmat(y, 50, 1) + beta * rand(50, 30000); 说明:每行都是您要计算的单个向量:

X(1,:) = x1; ... X(50,:) = x50; repmat(y,50,1)在第一个维度(行)将y向量重复50次



更多&回答...
poster 当前离线   回复时引用此帖