Создание массивной матрицы, выбор определенных строк из файла - PullRequest
1 голос
/ 22 апреля 2019

У меня есть куча файлов матов, содержащих большую последовательность данных в виде строк (7 строк по 160000 выборок в каждом файле).Мне нужно создать матрицу из определенных строк.

Я использовал следующий код для загрузки файлов:

files = dir ('*.mat');
data = load (files(1).name);
for k = 2:numel(files);
  data (k) = load (files(k).name);
end 

Итак, все мои данные из файлов матов аккуратно организованы в один структурный массив.Затем я использовал этот вид кода для создания матрицы:

A = [data(1).mydata(7,:); data(2).mydata(7,:); data(3).mydata(7,:); ...
     data(4).mydata(7,:); data(5).mydata(7,:); data(6).mydata(7,:); ...
     data(7).mydata(7,:); data(8).mydata(2,:); data(9).mydata(2,:); ...
     data(10).mydata(2,:)];  %data matrix

Но тогда у меня есть большее количество файлов, и когда я хочу создать другую матрицу, я должен изменить 50 - 70 чисел вручную иэтот кусок кода становится громоздким, и легко ошибиться.

Есть ли другой способ сделать это, например, индексировать, что мне нужна 2-я строка из первых 21 полей и 7-я строка из следующих 21 полей?

Или мне нужно загружать файлы по-другому с самого начала?

1 Ответ

0 голосов
/ 22 апреля 2019

Если в каждом из ваших MAT-файлов есть одна переменная mydata, я бы загрузил их следующим образом:

files = dir ('*.mat');
data = cell(numel(files),1);
for k = 1:numel(files);
  tmp = load(files(k).name);
  data{k} = tmp.mydata;
end

Индексирование теперь немного проще.

Например, вы можете использовать cellfun для извлечения строки 7 из каждого элемента в массиве ячеек:

A = cellfun(@(d)d(7,:),data,'UniformOutput',false');
A = cat(1,A{:});

Для извлечения строки 7 из первых 7 элементов и строки 2из оставшихся:

A1 = cellfun(@(d)d(7,:),data(1:7),'UniformOutput',false');
A2 = cellfun(@(d)d(2,:),data(8:end),'UniformOutput',false');
A = cat(1,A1{:},A2{:});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...