Длительное время загрузки данных в Matlab

У меня есть четыре переменные, каждая из которых сохранена в 365 мат-файлах (размер: 8 x 92 x 240). Я пытаюсь загрузить их в свою функцию в цикле for day=1:365, по одному файлу переменных в день. Однако две первые переменные всегда загружаются слишком долго. Мой код для загрузки выглядит так:

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, я мог видеть, что для загрузки первых двух переменных потребовалось 5420 секунд при 365 вызовах, тогда как для загрузки последних двух переменных потребовалось 6 и 4 секунды соответственно при 365 вызовах. Когда я меняю порядок загрузки переменных, например. eEraSD до tempSD, все же первые две загрузки занимают больше времени.

При использовании tic toc для отслеживания времени, затрачиваемого на загрузку, оказывается, что время загрузки первой или второй переменной экспоненциально увеличивается с количеством вызовов (последние вызовы выполняются за 50 секунд). Для третьей и четвертой переменных время загрузки остается примерно 0,02-0,04 секунды на файл, более или менее независимо от того, как далеко я продвинулся в цикле for. См. рисунки ниже.

введите здесь описание изображениявведите здесь описание изображения

При использовании importdata вместо load первой строке требуется около 8000 секунд для загрузки 365 раз (при этом загрузка экспоненциально увеличивается, как показано для T на втором рисунке). Затем другим строкам требуется около 10 секунд для загрузки 365 раз.

Я не могу понять, почему это выглядит так и что я могу сделать, чтобы уменьшить время загрузки. Был бы очень признателен за любую идею возможного решения для этого.


person LaWa    schedule 14.12.2012    source источник
comment
Эти файлы случайно не хранятся на сетевом диске?   -  person George Skoptsov    schedule 14.12.2012
comment
Повторится ли это, если вы дважды запустите цикл загрузки? (без промежуточных операций)   -  person Xyand    schedule 14.12.2012
comment
Файлы хранятся локально.   -  person LaWa    schedule 14.12.2012
comment
Спасибо Альберту за указание на это. Если я запускаю только цикл for, без какого-либо другого кода, у меня вообще не возникает этой проблемы... Я тестировал в отдельном функциональном файле (с циклом for внутри функционального файла один раз и снаружи один раз) , и 365 дней были загружены в мгновение ока. Похоже, это связано с чем-то, что я делаю в остальной части скрипта, хотя тик-так и профиль указывают только на операции загрузки. Я думаю, мне следует просто попытаться постепенно расширить код и посмотреть, когда проблема появится снова. Или вы, возможно, имеете какое-либо представление о возможных связях?   -  person LaWa    schedule 14.12.2012
comment
Не могли бы вы также опубликовать свою функцию загрузки? Какого размера ваши файлы? Каков их формат?   -  person Barney Szabolcs    schedule 14.12.2012
comment
Возможно ли, что вы динамически выделяете память для загруженных переменных? то есть вы меняете размер переменных внутри цикла загрузки? Если это так, попробуйте заранее выделить всю память, необходимую для всех переменных.   -  person Shai    schedule 16.12.2012
comment
Другой вопрос: есть ли в ваших mat файлах дополнительные переменные, которые вы не загружаете?   -  person Shai    schedule 16.12.2012
comment
@Shai, в моей функции я только загружаю переменные и отправляю их из функции в основной скрипт. Теперь я пытаюсь использовать importdata вместо этого и посмотреть, изменит ли это что-нибудь. У меня нет дополнительных переменных в файле, который я не загружаю.   -  person LaWa    schedule 20.12.2012
comment
@ Faisal-Shahzad, я не совсем понимаю, что вы имеете в виду. Но файлы все размером 8Х92Х240.   -  person LaWa    schedule 20.12.2012
comment
Можете ли вы сказать, какой формат сохранения вы используете? Я помню, что формат 7.3 (на основе hdf5) имел серьезные проблемы с производительностью.   -  person bdecaf    schedule 09.01.2013


Ответы (2)


Я предполагаю, что ваши наборы данных находятся в одном каталоге (по сети или локально) и с одинаковыми атрибутами, например. свойства доступа и так далее.

Тогда единственный оставшийся вариант — это характеристики вайрбалов, хранящихся в этих матфайлах. Можете ли вы проверить, насколько эти переменные отображаются в размере, например. загрузив образец. Это сузит круг, чтобы решить вашу проблему.

Надеюсь, что поможет.

FS

person Community    schedule 17.12.2012

Спасибо за вашу помощь. Я, наконец, узнал, что вызвало проблему. В цикле for позже в сценарии я сохранил другие данные в папку, которую назвал temp. После переименования этой папки во что-то другое (например, временное) проблема с загрузкой данных исчезла.

(Теперь, когда практическая проблема решена, это уже не имеет большого значения, но я не могу сказать, что понимаю, почему между более поздним вызовом «сохранить» и этим вызовом «импорт данных» или «загрузить» возникла такая специфическая связь.)

Пожалуйста, посмотрите новый вопрос о папке temp

person LaWa    schedule 14.01.2013
comment
очень странное поведение. Я видел и другой ваш вопрос. Можете ли вы опубликовать очень короткий фрагмент кода, воспроизводящий это поведение (загрузить и сохранить в temp)? - person Shai; 15.01.2013