我正在运行一个需要一些时间的程序。最好在命令窗口中显示实时显示运行进度。如下所示:
>>>>>>>> completed 90%
假设程序通过多个循环运行:
for ii = 1:n
for jj = 1:m
for kk = 1:s
.....
end
end
end
是否有任何有效的方法或某些特殊功能来实现这一目标?我不想使用waitbar.m,因为我还在命令窗口中实时打印了其他结果。这些打印结果与文本进度相结合,用于方便检查。
答案 0 :(得分:1)
如果您不介意在单独的窗口中打开进度显示,则可以使用Matlab 等候栏。
对于您的示例,假设您想根据外部循环上完成的迭代次数计算等待条,它将类似于
h=waitbar(0, 'My waitbar');
for ii = 1:n
for jj = 1:m
for kk = 1:s
.....
end
end
fraction_done = ii/n;
waitbar(fraction_done)
end
close (h)
如果您真的想要基于文本的显示,那么在https://www.mathworks.com/matlabcentral/fileexchange/56424-waittext的MATLAB文件交换中可以使用 waittext 。
我没有使用过这个,但它看起来与你想要的类似。
答案 1 :(得分:1)
首先,每当内循环前进时,您需要计算百分比步长。这可以通过计算来完成:
percent_step = 1.0 / n / m / s
然后,您可以使用\b
(退格符)的串联强制MATLAB在同一行上打印。这是一个只计算随机10x10矩阵并获得其转置的MWE(仅显示进度百分比):
backspaces = '';
percentage = 0;
% DEFINE n, m, s as you wish, here I put some random values
n = 100;
m = 15;
s = 24;
percent_step = 100.0 / n / m / s;
for ii = 1:n
for jj = 1:m
for kk = 1:s
% Do stuff
a = rand(10);
b = a';
% Print percentage progress
percentage = percentage + percent_step;
perc_str = sprintf('completed %3.1f', percentage);
fprintf([backspaces, perc_str]);
backspaces = repmat(sprintf('\b'), 1, length(perc_str));
end
end
end