2016-10-15 183 views
0

私はしばらく時間がかかるプログラムを実行しています。実行中の進行状況をリアルタイムで表示して、コマンドウィンドウに表示する方が良いでしょう。以下のような何か:Matlabコマンドウィンドウに表示されるテキストの進捗状況を表示する方法

>>>>>>>> completed 90% 

は、プログラムが複数のループかかわらず実行されますと仮定します

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

はそれを達成するための任意の効率的な方法やいくつかの特別な機能はありますか?私はwaitbar.mを使いたくないので、コマンドウィンドウに他の結果もリアルタイムで表示されているので、これらの印刷結果は、テキスト化された進捗と合わせて、検査の便宜のために使用されます。

答えて

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) 

のようなものを外側のループ上で完了した反復回数に基づいてウエイトバーを計算したいと言いますwaittextは、MATLABファイル交換でhttps://www.mathworks.com/matlabcentral/fileexchange/56424-waittextにあります。

私はこれで作業していませんが、あなたが望むものと似ているようです。

+0

私はwaitbarを意味しません。コマンドウィンドウに進捗状況が印刷されたテキストとして表示され、進捗状況に応じてテキストが更新されます。 – jingweimo

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 
関連する問題