No. | : 107 |
Title | : Re: ファイル読み込み速度 |
Date | : 2016/05/18(Wed) 13:23:29 |
Name | : Anonymous |
URL | : |
> SADで10M程度のテーブルファイルを読み込む際、以下のように書いているのですが、読み込みに5分から10分程度かかってしまいます。早く読み込む方法をご存知でしたら教えていただけますと幸いです。
>
> While[((v=Read[f,Real])<=>EndOfFile),AppendTo[tbl,v]];
1. 長いリストに対するAppendToの効率は極めて悪い
While + AppendTo Table + Breakに置き換える
Table[With[{v = Read[f, Real]}, If[v === EndOfFile,Break[], v]], {Infinity}]
但し、長すぎると SAD Stackがあふれるので、長さが不定なら適当な長さでTableを止めて外部のループでFlatte[*, {1}]かJoinでつなぐ
2. Whileで繰り返しReadを呼び出すのが効率が悪い
File Formatが既知であれば、OpenRead時に shell commandを渡して、SAD Listに整形してしまう
f = OpenRead["!(echo '{'; sed <some-replace-commands> <file>; echo 'Null[]}' )"];
tbl = Read[f];
Close[f];
- WebForum -