plot関数で折れ線グラフと散布図の出力速度を比べる(その1:まずは比べてみよう)
plot()で点の個数が20000弱の散布図を描いて出力しようとしたらとんでもなく時間がかかる。というか相当しばらく放置していないと出力が終わらない。どれくらいかかるのかと思ってネットで調べてみても誰も調べてなさそうなので、僕が調べることにした。
まず時間計測のためのmファイルをサクッと書いた:
function measureElapsedTime(num_str,type) num=base2dec(num_str,10); printf("Number of Plot: %d\n",num); x=linspace(0,2*pi,num); y=sin(x); if(type=="line") plot(x,y); elseif(type=="dots") plot(x,y,"."); end t0=clock(); print "hoge.eps" -depsc2 printf("Elapsed time(sec): %f\n",etime(clock(),t0)); end
※はてな記法の「スーパーpre記法」でmatlabをセットしたところprintf()内の%が悪さをして見づらいので、今回はあえてjavaをセットしてみました。今後も時々こういうことをするかも。
これをmeasureElapsedTime.mという名前で保存して、このmファイルを引数を含めて実行したところ以下のようになった:
これはひどい。折れ線グラフはほとんど変わらないのに、散布図になったとたんに2倍以上かかるようになってるじゃないか。こんな調子で20000点なんて出力したら1時間かかるんじゃないの?
次回は具体的に散布図がどれくらい描画に時間がかかるのかをモデル式を構築することで求めたいと思います。