在循环外的条件下每n次迭代显示变量值

时间:2016-07-06 09:32:31

标签: matlab if-statement for-loop

当我必须在for循环的每n次迭代中显示变量值时,我总是沿着这些行做一些事情:

for ii=1:1000
  if mod(ii,100)==0 
     display(num2str(ii))
  end
end

我想知道是否有办法将if条件移出循环以加速代码。或者如果我能做些不同的事情。

2 个答案:

答案 0 :(得分:3)

您可以使用嵌套循环:

N = 1000;
n = 100;
for ii = n:n:N
    for k = ii-n+1:ii-1
        thingsToDo(k);
    end
    disp(ii)
    thingsToDo(ii);
end

其中thingsToDo()获取相关计数器(如果需要)。这有点混乱,但可以节省很多if测试。

答案 1 :(得分:1)

除非测试值的数量远大于打印值的数量,否则我不会责怪if语句。起初看起来可能不是这样,但打印确实是一项相当复杂的任务。需要转换变量并将其发送到输出流,然后在终端中打印。如果您需要加快代码速度,请减少打印数据量。

通常,Matlab函数也需要矢量输入。这是dispdisplay的情况,并且只进行一次函数调用。此外,在打印之前不需要转换为字符串。 Matlab应该将数据发送到某种流(这可能确实需要char类型的参数,但这与Matlab使用的字符不同),所以这可能只是浪费时间。除此之外,num2str还要做很多事情来确保类型安全转换。您已经知道display是类型安全的,因此所有这些检查都是多余的。

试试这个,

q = (1:1000)'; % assuming q is some real data in your case
disp(q(mod(q,100)==0)) % this requires a single call to disp