はじめに
みなさんは重たい解析(時間がかかる解析)を実行するときに、”今、どの程度終わっているか”をどのように把握していますか?
何も考えずに、解析を実行してしまい「あれ?まだ解析終わってないな!あとどれくらい時間かかるんだろう?」とか、「この解析は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
コメント