MATLAB:嵌套 for 循环每次连续迭代都需要更长的时间

标签 matlab loops for-loop

/edit:循环不会变慢。我没把握好时间。请参阅拉斯曼的回答。

我正在为一个有点长且复杂的函数循环 3 个参数,我注意到有两件事我不明白:

  1. 虽然函数只返回一个结构(我只需要其中的一个字段),但每次迭代都会覆盖它,因此执行速度会随着每次连续迭代而变慢。
  2. 探查器显示最里面的 forend 语句需要很长时间。

考虑以下示例(我知道这可以很容易地进行矢量化,但据我所知,我调用的函数不能):

function stuff = doSomething( x, y, z )
    stuff.one = x+y+z;
    stuff.two = x-y-z;
end

以及我如何执行函数

n = 50;
i = 0;
currenttoc = 0;
output = zeros(n^3,4);
tic
for x = 1:n
    for y = 1:n
        for z = 1:n
            i = i + 1;
            output(i,1) = x;
            output(i,2) = y;
            output(i,3) = z;
            stuff = doSomething(x,y,z);
            output(i,4) = stuff.one;
            if mod(i,1e4) == 0 % only for demonstration, not in final script
                currenttoc = toc - currenttoc;
                fprintf(1,'time for last 10000 iterations: %f \n',currenttoc)
            end
        end
    end
end

我怎样才能加快速度?为什么每次迭代花费的时间都比前一次长?我很确定这是糟糕的编程,对此深表歉意。

最佳答案

当我用 output(i,4)=toc; 替换对 doSomething 的调用时,我绘制了 diff(output(:,4)) ,显然,每次调用 fprintf 的时间都越来越长。

删除 if-clause 返回到每次迭代花费的时间大致相同。

关于MATLAB:嵌套 for 循环每次连续迭代都需要更长的时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15078021/

相关文章:

c++ - 从字符串中的整数进行加法运算

C++ 用函数替换代码的最佳方法

excel - 在 MATLAB 中使用贝塞尔函数

matlab - 如何在matlab中获得唯一的数字对,其中两个数字之前在矩阵中没有重复过

java - 将 do-while 转换为 Java 中的 for 循环

arrays - 有没有办法在用户输入特定数字之前创建数组?

c - Noob C 帮助 - 在开关/外壳内循环?

matlab - 单元格的 Fieldnames 函数的等效项

macos - 为什么 "opengl software"在 Mac OS X Matlab 上不起作用?

javascript - 循环时输出中额外的 + ; javascript