当我必须在for
循环的每n次迭代中显示变量值时,我总是沿着这些行做一些事情:
for ii=1:1000
if mod(ii,100)==0
display(num2str(ii))
end
end
我想知道是否有办法将if
条件移出循环以加速代码。或者如果我能做些不同的事情。
答案 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函数也需要矢量输入。这是disp
和display
的情况,并且只进行一次函数调用。此外,在打印之前不需要转换为字符串。 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