私は現在、非常に大きな MAT ファイル (約 150 MB) の保存/読み込みを含むプロジェクトに取り組んでおり、読み込まれた cell 配列へのアクセスは、スクリプトまたは関数内で作成された同等のバージョンよりもはるかに遅いことに気付きました。
この例を作成して、コードをシミュレートし、違いを示しました。
clear; clc;
disp('Test for computing with loading');
if exist('data.mat', 'file')
delete('data.mat');
end
n_tests = 10000;
data = {};
for i=1:n_tests
data{end+1} = rand(1, 4096);
end
% disp('Saving data');
% save('data.mat', 'data');
% clear('data');
%
% disp('Loading data');
% load('data.mat', '-mat');
for i=1:n_tests
tic;
for j=1:n_tests
d = sum((data{i} - data{j}) .^ 2);
end
time = toc;
disp(['#' num2str(i) ' computed in ' num2str(time) ' s']);
end
このコードでは、MAT ファイルは保存も読み込みもされません。i に対する 1 回の反復の平均時間は 0.75 秒です。ファイルを保存/ロードする行のコメントを外すと、i に対する 1 回の反復の計算に約 6.2 秒かかります (保存/ロード時間は考慮されていません)。違いは8倍遅いです!
Windows 7 64 ビットで MATLAB 7.12.0 (R2011a) 64 ビットを使用しており、MAT ファイルはバージョン v7.3 で保存されています。
MAT ファイルの圧縮に関連している可能性はありますか? またはキャッシュ変数?これを防止/回避する方法はありますか?