我是matlab的新手。我写了下面的代码。问题是循环没有终止。请帮我找出问题
actualvalue = randn(2000,10);
reward = zeros(2000,10,1000);
for i=1:2000
for j=1:10
for k=1:1000
mean = actualvalue(i,j);
reward(i,j,k) = normrnd(mean,1);
end;
end;
end;
答案 0 :(得分:2)
可以在没有循环的情况下完成,这通常更快:
reward = bsxfun(@plus, actualvalue, randn(2000,10,1000));
要了解其工作原理,请注意,平均mu
和标准差1
的正常随机变量只是一个标准化(0均值,1标准差)正态随机变量{ {1}}已添加。使用bsxfun
可以有效地完成此添加。使用randn
代替mu
也可以节省一些时间,因为normrnd
只需要一些开销来调用normrnd
。
答案 1 :(得分:0)
没有for循环的另一种解决方案:
reward=normrnd(repmat(actualvalue,1,1,1000),1);
repmat(actualvalue,1,1,1000)
添加了第三个维度,所以现在我们有一个3D矩阵,它只是矩阵actualvalue
的1000个副本,我们可以将其作为normrnd
的输入,并且它将使用“展开的”reward
均值和单位差异直接生成相同大小的actualvalue
矩阵。