2016-10-15 135 views
0

我正在运行需要一些时间的程序。最好实时显示运行进度,并显示在命令窗口中。类似下面:Matlab如何显示文本显示在命令窗口中的进度

>>>>>>>> completed 90% 

假设程序运行时,虽然多重循环:

for ii = 1:n 
    for jj = 1:m 
     for kk = 1:s 
      ..... 
     end 
    end 
end 

有什么有效的方法或一些特殊的功能,以实现这一目标?我不想使用waitbar.m,因为我还在命令窗口中实时打印了其他结果。这些打印结果,加上发短信的进度,用于方便检查。

回答

1

如果您不介意在单独的窗口中打开进度显示,则可以使用Matlab waitbar

对于你的榜样,说你想计算基础上完成了外循环迭代的数量waitbar,它会像

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 File Exchange上可用的等待文本

我没有与此工作,但它似乎与你想要的相似。

+0

我不是说waitbar。我希望命令窗口中显示的进度为打印文本,并根据进度更新文本。 – jingweimo

1

首先,您需要计算每次内循环前进时的百分比步长。这可以通过计算来完成:

percent_step = 1.0/n/m/s 

然后,你可以强制MATLAB使用\b(退格字符)的串联在同一行打印。这里是一个MWE,只是计算一个随机10x10矩阵,并得到其转置(只是为了显示进度百分比):

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 
相关问题