MATLABのTips 時間を要する解析の総解析時間を見積もる方法

はじめに

みなさんは重たい解析(時間がかかる解析)を実行するときに、”今、どの程度終わっているか”をどのように把握していますか?

何も考えずに、解析を実行してしまい「あれ?まだ解析終わってないな!あとどれくらい時間かかるんだろう?」とか、「この解析はCPUの使用率が高いから他の作業ができない!!“ctrl + c”で実行中断するか迷うな」みたいな時ってありますよね。

この記事では、そんな問題を解決する方法を紹介します。

MATLABの使用歴の長い方は「この記事の方法知ってるよ。もっといい方法あるのに」と思う方もいるかと思いますが、MATLABをはじめたばかりの人は「こんな便利な機能もあるんだ」と思っていただけると思います。

スポンサーリンク

本題

まず、最初に紹介するのが「tic」と「toc」という関数を使う方法です。

  TIC   ストップウオッチタイマの開始
  
    TIC と TOC 関数は、経過時間を測定するために一緒に機能します。
    TIC は現在の時間を保存し、TOC は経過時間を測定するために後で使われます。
    コマンドのシーケンスはつぎのようになります。
  
              TIC
              operations
              TOC
  
    これは、MATLAB が "operations" でここで指定されたいくつかの操作を
    完了するためにかかる時間の量を測定し、秒単位で時間を表示します。
 
    参考  toc, cputime.

ただ、この方法は少し玄人向けだと思います。

「tic」と「toc」よりももっと簡単な方法が「waitbar」を使う方法です。
MATLABで時間のかかる処理は「for文」での繰り返し処理だと思います。
「waitbar」を使うと、その「for」での繰り返しが、どの程度終わっているのかを可視化できます。そうすれば、総解析時間を見積もることができます。

一例として、サンプルコードを示します。

h1 = waitbar(0,'外側のfor');
for ii1=1:10
    h2 = waitbar(0,['内側のfor (外側のforは' num2str(ii1) '/100)']);
    for ii2=1:100
        waitbar(ii2/100,h2)    
        pause(0.01)
    end
    waitbar(ii1/100,h1)
    close(h2)
end
close(h1)

上記のコードを実行して頂ければわかりますが、下記のようなwaitbarの図?が出力されます。

スポンサーリンク

ポケモンとかドラクエのHPみたいですよね。このHPが満タンになると、解析終了って感じです。
解析(コード)にもよりますが、「for文」の中に「for文」を使用していて、内側の「for文」に「waitbar」を使用してしまうと、何度もwaitbarの図を更新することになるので、総解析時間が長くなるという問題があります。

なので、外側だけに「waitbar」を入れるのが一般的かと思います。

 

今日はこのへんでGood luck

 

コメント