Загрузка нескольких файлов .mat в матрицу и выполнение операций над ней - PullRequest
0 голосов
/ 09 декабря 2018

У меня есть 429 числовых матриц одинакового размера (107 строк по 36 столбцов), которые хранятся в последовательно именуемых файлах .mat (например, subj_00000.mat ... subj_00428.mat).Вот что мне нужно сделать:

  1. Импорт в рабочую область MATLAB.
  2. После импорта усредните все из них, чтобы сгенерировать другую матрицу, которая также будет иметь размер 107x36.
  3. Наконец, линейно коррелируйте каждый столбец средней матрицы с каждым столбцом каждого изоригинальные матрицы 429, чтобы сгенерировать новую матрицу из 429 строк и 36 столбцов.

Итак, я дошел до стадии построения массива 107 x 36 x 429, который будет заполнен моим набором матриц.

S = dir(fullfile(D,'subj*.mat')); % D is the path where the .mat files are saved
N = numel(S);
C = cell(1,N); % preallocate cell array
for k = 1:N
    S = load(fullfile(D,S(k).name));
    C(k) = struct2cell(S);
end
A = cat(3,C{:}); % join all of the original matrices into a 107x36x429 array
M = mean(A,3)

но я получаю следующее сообщение об ошибке:

Reference to non-existent field 'name'.
Error in myscript (line 6)
S = load(fullfile(D,S(k).name));

1 Ответ

0 голосов
/ 09 декабря 2018

Вы перебираете S, но каждый раз перезаписываете.Переименуйте S, который находится внутри цикла.Пока вы это делаете, я бы дал всем вашим переменным значимые имена - нет необходимости каждый раз использовать одну букву.- svdc

Спасибо!Я переименовал

S = load(fullfile(D,S(k).name)); 

как

T = load(fullfile(D,S(k).name));

, и это сработало

...