2016-08-26 7 views
-2

У меня есть одна папка, содержащая 5 разных папок (каждая имеет 10 .mat файлов), и я хочу загрузить или прочитать все файлы в MATLAB. Можете ли вы дать мне подсказку или какую-нибудь полезную информацию, как я могу это сделать?Как я могу прочитать несколько файлов .mat из 5 разных папок, которые хранятся в моей основной папке

Каждый файл .mat содержит матрицу 30000x6 и мне также нужно сохранить один вектор-столбец из каждого файла и сохранить его в отдельной матрице. Мне нужна эта матрица для PCA.

Любая помощь приветствуется.

+0

Это файлы .m или файлы .mat? Обычно .m содержит код и .mat содержит данные, но вы говорите, что у вас есть .m с данными. – Brick

+0

@Brick Я сожалею, что это файлы .mat. все файлы содержат много чтений. и они хранятся в одной матрице 3000 * 6. –

+0

@Brick ya are are .mat files –

ответ

-1

На первом месте вам нужно найти папки внутри вашей основной папки (предположим, что это имя main_folder). Вы можете сделать это с помощью dir команду, которая возвращает структуру с несколькими интересными особенностями:

dirContents = dir('main_folder') 

Выходы

dirContents = 

9x1 struct array with fields: 

    name 
    date 
    bytes 
    isdir 
    datenum 

перебираем результате ищет записи с isdir полем, установленным в 1 (будьте осторожны с . и ..). Если вы также хотите выполнять поиск во вложенных папках, рекурсивно применяйте эту процедуру.

Для каждой записи получите файлы с требуемым расширением. Вы можете использовать dir снова символы:

% Loop over the directories inside 'main_folder' 
for indDir = 1:numel(dirContents) 
    thisEntry = dirContents{indDir}; 
    if thisEntry.isdir 
     % If entry is a directory, search .mat files 
     matFilesInFolder = dir(['main_folder/',thisEntry.name,'/*.mat']); 
     % For each found .mat file, load contents 
     for indMat = 1:numel(matFilesInFolder) 
      thisMat = matFilesInFolder{indMat}; 
      matContents = load(['main_folder/',thisEntry.name,'/',thisMat.name]); 

      % HERE DO WHATEVER YOU WANT WITH THE CONTENTS OF THE FILE 
     end 
    end 
end 

Это трудная часть. Код не был протестирован, возможно, он нуждается в исправлениях.

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

+0

Любые комментарии, почему это решение заслуживает отрицательного голоса? Он отвечает на вопрос AFAIK :-( – dunadar

+1

_ «Код не был протестирован, возможно, ему нужны исправления» _, ручная конкатенация вместо использования 'fullfile', OP будет в слезах, когда он обнаружит, что copypasting ваш код не будет выполнить его _ «нужно сохранить один вектор столбца из каждого файла и сохранить его в одной отдельной матрице» _ – dasdingonesin

+0

Не знал о 'fullfile', спасибо. В любом случае, я не думаю, что цель stackoverflow - готовить код для вставки в ваш проект, поэтому я предпочитаю не проверять код для начинающих :-) – dunadar