MATLAB:提取不同文件中的开始并将它们保存在不同的文件中

时间:2010-09-21 14:57:47

标签: matlab

我的MATLAB脚本是:

  1. 从MATLAB文件中提取四个不同的fMRI个开头(这些文件名为'subject 06 data','subject 05 data'等)

  2. 将此信息放在一个新文件中,其中包含两个名为“durations”和“names”的变量。

  3. 将所有这些保存为新的MATLAB文件。

  4. 我面临两个问题:

    目前,下面的脚本设法为“Gender_recogntion”目录中的第一个MATLAB文件执行步骤1到3,但是对于文件夹中的其他MATLAB文件,它不会执行1到3。它在'load(sub_name(i).name);'。

    行的循环中崩溃

    这是我得到的错误:

      

    ???索引矩阵参考不正确。

         

    ==>中的错误Gender_onsets_script_2 at 16
         负载名(sub_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 :(得分:0)

关于命名输出文件与输入相同的第二个问题,您可以使用保存的函数版本并传入变量 sub_name(i).name 作为文件名参数。

保存(sub_name(i).name,'names','durations','onsets')

这对输入和输出使用完全相同的名称(在脚本的不同目录中)。当我保存输出文件时,我通常会将它们保存在与输入相同的目录中,因此我使用正则表达式修改输入文件名(请参阅 regexprep )或添加前缀或后缀( strcat < / strong>)创建一个相关但不同的输出文件名。

供将来参考...保存的默认文件类型是MATLAB数据格式;如果您的数据类型兼容,您可以传入'-ASCII'作为参数,以保存为文本文件。此示例中的单元格数组不是,但字符串和数字矩阵将是,因此如果文本输出文件很重要,您可以从头开始使用备用数据结构或使用cell2mat转换单元格。 save()版本的一般示例:保存(文件名,' - ASCII','x','y','z')其中x,y,z是ASCII友好变量, filename是一个文本文件。


[补充回复,2011年1月5日加入]

关于错误讯息的第一个问题: ???索引矩阵参考不正确。

保存的.mat文件是否可能包含名为 dir 的变量,它会覆盖标准目录列表功能并导致该错误?我在另一个网站上阅读了该提示,只是想传递它以防万一。