我目前正在处理一个涉及保存/加载相当大的 MAT 文件(大约 150 MB)的项目,我意识到访问加载的单元数组比在脚本或函数中创建的等效版本要慢得多。
我创建了这个示例来模拟我的代码并显示差异:
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 上一次迭代的平均时间是 0.75 秒。当我取消注释保存/加载文件的行时,对 i 进行一次迭代的计算大约需要 6.2 秒(不考虑保存/加载时间)。差别慢了 8 倍!
我正在使用 MATLAB 7.12.0 (R2011a) 64 位和 Windows 7 64 位,并且 MAT 文件以 v7.3 版本保存。
会不会和MAT文件的压缩有关?还是缓存变量?有什么方法可以防止/避免这种情况吗?