автоматизировать загрузку нескольких файлов * .mat и изменение размера матрицы - PullRequest
2 голосов
/ 11 ноября 2010

У меня есть тонна данных, которые необходимо обработать из лабораторных работ.У меня есть тонна .mat файлов, которые содержат матрицу сигналов размером 7 x w.Мне нужно изменить размер матрицы до 7 x N, а w будет больше и меньше, чем N, чтобы упростить остальную часть анализа (не обращая внимания на данные за N).У меня есть psuedocode о том, как я хочу, чтобы это работало, но я не знаю, как это реализовать.Любая помощь будет большой благодарностью!

Структура папок всех моих данных:

Основная папка

Alpha 1
    1111.mat
    1321.mat
Alpha 2
    1010.mat
    1234.mat
    1109.mat
    933.mat
Alpha 3
    1223.mat

и т. Д.

Psudeocode:

    Master_matrix = []
    For all n *.mat
        Load n'th *.mat from alpha 1
        If w > N
            Resize matrix down to N
        Else
            Zero pad to N
        End if
    Master_matrix = master_matrix .+ new resized matrix
    End for

rest of my code...

1 Ответ

2 голосов
/ 11 ноября 2010

Сначала вам нужно создать список файлов. У меня есть своя собственная функция для этого, но есть, например, GETFILELIST или отличный интерактивный UIPICKFILES для создания списка файлов.

Получив список файлов (я предполагаю, что это массив ячеек с именами файлов), вы можете сделать следующее:

nFiles = length(fileList);
Master_matrix = zeros(7,N);

for iFile = 1:nFiles
    %# if all files contain a variable of the same name, 
    %# you can simplify the loading by not assigning an output
    %# in the load command, and call the file by
    %# its variable name (i.e. replace 'loadedData')
    tmp = load(fileList{iFile});
    fn = fieldnames(tmp);
    loadedData = tmp.(fn{1});

    %# find size 
    w = size(loadedData,2);

    if w>=N
       Master_matrix = Master_matrix + loadedData(:,1:N);
    else
       %# only adding to the first few columns is the same as zero-padding
       Master_matrix(:,1:w) = Master_matrix(:,1:w) = loadedData;
    end
end

Примечание. Если вы на самом деле не хотите добавлять данные, а просто сохранить их в мастер-массиве, вы можете сделать Master_matrix массивом 7 на N по nFiles, где n-й Плоскость Master_matrix является содержимым n-го файла. В этом случае вы бы инициализировали Master_matrix как

Master_matrix = zeros(7,N,nFiles);

и вы бы написали условие if как

    if w>=N
       Master_matrix(:,:,iFile) = Master_matrix(:,:,iFile) + loadedData(:,1:N);
    else
       %# only adding to the first few columns is the same as zero-padding
       Master_matrix(:,1:w,iFile) = Master_matrix(:,1:w,iFile) = loadedData;
    end

Также обратите внимание, что вы можете инициализировать Master_matrix как NaN вместо zeros, чтобы нули не влияли на последующую статистику (если это то, что вы хотите делать с данными).

...