4 つの変数があり、それぞれが 365 個のマット ファイル (サイズ: 8 x 92 x 240) に保存されています。これらを for-loop 日 = 1:365、1 日あたり 1 つの変数ファイルで関数にロードしようとしています。ただし、最初の 2 つの変数は常に読み込みに異常に長い時間がかかります。ロードするための私のコードは次のようになります。
load([eraFolder sprintf('Y%dD%d-tempSD.mat',year,day)], 'tempSD'); % took 5420 s to load
load([eraFolder sprintf('Y%dD%d-tempDewSD.mat',year,day)], 'tempDewSD')
load([eraFolder sprintf('Y%dD%d-eEraSD.mat',year,day)], 'eEraSD'); % took 6 seconds to load
load([eraFolder sprintf('Y%dD%d-pEraSD.mat',year,day)], 'pEraSD');
Profiler を使用すると、365 回の呼び出しで最初の 2 つの変数を読み込むのに 5420 秒かかったのに対し、最後の 2 つの変数を 365 回の呼び出しで読み込むのにそれぞれ 6 秒と 4 秒かかったことがわかりました。変数がロードされる順序を入れ替えた場合、たとえばのeEraSD
前にtempSD
、まだ時間がかかるのは最初の 2 つのロードです。
を使用tic
toc
してロードに費やされた時間を追跡すると、最初または 2 番目の変数をロードする時間が、呼び出しの数に応じて指数関数的に増加するように見えます (最後の呼び出しの実行には 50 秒かかります)。3 番目と 4 番目の変数の場合、読み込み時間はファイルあたり約 0.02 ~ 0.04 秒にとどまり、for ループのどこまで進んだかにはほぼ依存しません。以下の図を参照してください。
'load' の代わりに使用importdata
すると、最初の行は 365 回ロードするのに約 8000 秒かかります (2 番目の図の T で示されているように、ロードは指数関数的に増加します)。他の行は、365 回ロードするのに約 10 秒かかります。
なぜこのように見えるのか、読み込み時間を短縮するために何ができるのか理解できません。これに対する可能な解決策のアイデアをいただければ幸いです。