MATLAB: извлечение файлов в разных файлах и сохранение их в разных файлах - PullRequest
0 голосов
/ 21 сентября 2010

Мой скрипт MATLAB предназначен для:

  1. Извлечение четырех разных fMRI включений из файлов MATLAB (файлы называются «данные субъекта 06», «данные субъекта 05» и т. Д.)

  2. Поместите эту информацию в новый файл с двумя другими переменными с именами 'durations' и 'names'.

  3. Сохраните все это как новый файл MATLAB.

У меня две проблемы:

На данный момент приведенному ниже сценарию удается выполнить шаги 1–3 для первого файла MATLAB в каталоге «Gender_recogntion», но он не выполняет шаги 1–3 для других файлов MATLAB в папке. Вылетает в цикле в строке 'load (sub_name (i) .name);'.

Это ошибка, которую я получаю:

??? Неверная ссылка на индексную матрицу.

Ошибка в ==> Gender_onsets_script_2 в 16
нагрузка (sub_name (я) .name);

Кроме того, я хотел бы назвать новые файлы MATLAB именами исходных файлов MATLAB. На данный момент новые файлы MATLAB называются «onsets.mat».

clear all
close all
clc

cd 'C:\Program Files\MATLAB\R2007b\Data\Resilience\Real_data\Raw\Matlab_files\Gender_recogntion';

sub_name = dir('C:\Program Files\MATLAB\R2007b\Data\Resilience\Real_data\Raw\Matlab_files\Gender_recogntion\*.mat');

for i = 1:numel(sub_name);
   load(sub_name(i).name);

   names = {'sad' 'anger' 'neutral' 'rest'};
   durations = {[18] [18] [18] [18]};
   onsets=cell(1,4);

   onsets{1} = data.time_since_scan_start(data.emotion==5)/1000; %Get the 36 onsets for sad.
   onsets{2} = data.time_since_scan_start(data.emotion==4)/1000; %Get the 36 onsets for anger.
   onsets{3} = data.time_since_scan_start(data.emotion==6)/1000;% Get the 36 onsets for calm.
   onsets{4} = datarest.onset/1000; %Get the six onsets for the rest blocks.

   onsets{1} = onsets{1}(1:6:36)'; %Get the first onset value of each of the six blocks.
   onsets{2} = onsets{2}(1:6:36)';
   onsets{3} = onsets{3}(1:6:36)';
   onsets{4} = onsets{4}';

   %cd Onsets folder, saves onsets, and then cd back to folder "Matlab_files"
   cd 'C:\Program Files\MATLAB\R2007b\Data\Resilience\Real_data\Onsets';
   save 'onsets.mat' names durations onsets
   cd 'C:\Program Files\MATLAB\R2007b\Data\Resilience\Real_data\Raw\Matlab_files\Gender_recogntion';
end

1 Ответ

0 голосов
/ 29 декабря 2010

Для вашего второго вопроса о присвоении имен выходным файлам тех же, что и для ввода, вы можете использовать версию функции save и передать переменную sub_name (i) .name какаргумент имени файла.

save (sub_name (i) .name, 'names', 'durations', 'onsets')

Это имя используется точно так жеввод и вывод (в разных каталогах, в вашем скрипте).Когда я сохраняю выходные файлы, я обычно храню их в том же каталоге, что и входные данные, поэтому я изменяю имя входного файла с помощью регулярных выражений (см. regexprep ) или добавляя префикс или суффикс ( strcat * 1014).*) для создания связанного, но отдельного выходного файла.

Для дальнейшего использования ... тип файла для сохранения по умолчанию - формат данных MATLAB;вы можете передать в качестве аргумента -ASCII, чтобы сохранить его в виде текстового файла, если ваши типы данных были совместимы.Массивы ячеек в этом примере - нет, но строки и числовые матрицы были бы полезны, поэтому, если бы текстовые выходные файлы были важны, вы могли бы использовать альтернативные структуры данных с самого начала или преобразовывать ячейки с помощью cell2mat.Типовой пример с версией save (): save (filename, '-ASCII', 'x', 'y', 'z') , где x, y, z - переменные, подходящие для ASCII, и имя файлатекстовый файл


[дополнительный ответ, добавление 5 января 2011 г.]

О вашем первом вопросе об ошибке: ???Неправильная ссылка на индексную матрицу.

Возможно ли, что сохраненный файл .mat содержит переменную с именем dir , которая переопределяет стандартную функцию списка каталогов и вызывает эту ошибку?Я читал этот совет на другом сайте, просто хотел передать его на случай, если это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...