当我尝试运行以下代码时,我无法在matlab中返回命令提示符

时间:2015-01-26 23:29:48

标签: matlab random

我是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;

2 个答案:

答案 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矩阵。