我目前正在处理一个涉及保存/加载相当大的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文件的压缩有关吗?或者缓存变量?
有没有一种方法可以防止/避免这种情况?