В настоящее время я работаю над проектом, предусматривающим сохранение / загрузку довольно больших файлов MAT (около 150 МБ), и я понял, что доступ к загруженному массиву ячеек был намного медленнее, чем эквивалентная версия, созданная в скрипте или функции.
Я создал этот пример, чтобы смоделировать мой код и показать разницу:
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?Или кеширование переменных?Есть ли способ предотвратить / избежать этого?