Scilabで大容量のCSV(テキスト)ファイルを読み込む



Scilab 5.4.0から、新しい関数が追加されて新しい記事を書きました。下記の内容は古いです。






Scilabを利用される人の中には、データの分析に使う人が多いのではないのでしょうか。
私もその一人で、生体データや振動信号などのデータをScilabに取り込んで、信号処理して表示させるということを良く行います。

データはCSVなどテキストファイルで入力することが多いです。
Matlabの場合は、load関数で大体のファイルは読み込めてしまえますが、Scilabの場合は関数を使い分ける必要があります。

テキストファイルを読み込む関数としては、

・read関数
・fscanMat関数
・read_csv関数
・mfscanf関数

があります。
read関数は最も高速ですが、数字以外のデータが含まれるとエラーがでます。
fscanfMat関数は速度と実用のバランスが取れた関数で、数字以外のデータは自動的にスキップしてくれます。
read_csv関数は、文字列としてcsvを読み込む関数で、低速です。
mfscanf関数は低レベルの関数ですが、複雑なフォーマットを持つファイルを読み込むのに使えます。

各関数の違いを確認するために、実行速度を比較してみます。

a=rand(10000,2);
deletefile('test.csv');
write('test.csv',a);

timer();
b1=read('test.csv',-1,2);
t=timer();
printf("read:%f\n",t);

timer();
b2=fscanfMat('test.csv');
t=timer();
printf("fscanfMat:%f\n",t);

timer();
b3=read_csv('test.csv');
t=timer();
printf("read_csv:%f\n",t);

timer();
fp=mopen('test.csv');
b4=mfscanf(-1,fp,'%f %f');
mclose(fp);
t=timer();
printf("mfscanf:%f\n",t);




実行結果

read:0.062400
fscanfMat:0.280802
read_csv:61.635995
mfscanf:0.312002



read関数は高速なことがわかります。
fscanfMat関数もそこそこ高速です。mfscanf関数はfscanfMat関数とほぼ同等です。
read_csv関数はかなり低速で、大きなファイルを読み込むのには向きません。

Scilab 5.4.0から、新しい関数が追加されて新しい記事を書きました。そちらも参考にしてください。




スポンサーサイト

トラックバック


この記事にトラックバックする(FC2ブログユーザー)

Scilabで関数フィッティング: 金属の電気抵抗

実験データのフィッティングを行うことの出来る非線形最小二乗法は、gnuplotを含む色々なソフトに実装されています。しかし、積分を含む関数へのフィッティングは通常困難です。これ

コメントの投稿

非公開コメント

全記事表示リンク

全ての記事を表示する

最新記事
最新コメント
最新トラックバック
カテゴリ
検索フォーム
RSSリンクの表示
リンク