MATLAB:提取不同文件中的onset并将其保存在不同的文件中

MATLAB:提取不同文件中的onset并将其保存在不同的文件中,matlab,Matlab,我的MATLAB脚本是: 从MATLAB文件中提取四个不同的onset(文件名为'subject 06 data'、'subject 05 data'等) 将此信息与另外两个名为“durations”和“names”的变量一起放入新文件中 将所有这些保存为新的MATLAB文件 我面临两个问题: 目前,下面的脚本设法对“Gender_recognation”目录中的第一个MATLAB文件执行步骤1到3,但对文件夹中的其他MATLAB文件不执行步骤1到3。它在“load(sub_name(i.

我的MATLAB脚本是:

  • 从MATLAB文件中提取四个不同的onset(文件名为'subject 06 data'、'subject 05 data'等)

  • 将此信息与另外两个名为“durations”和“names”的变量一起放入新文件中

  • 将所有这些保存为新的MATLAB文件

  • 我面临两个问题:

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

    这是我得到的错误:

    ???索引矩阵引用不正确

    16时设置脚本2时出现错误==>性别设置
    负载(子单元名称(i).名称)

    另外,我想用原始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
    

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

    保存(子名称(i).名称,“名称”,“持续时间”,“启动时间”)

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

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


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

    关于错误消息中的第一个问题: ??? 索引矩阵引用不正确


    保存的.mat文件是否可能包含名为dir的变量,该变量将覆盖标准目录列表函数并导致该错误?我在另一个网站上读到了这个技巧,只是想把它传下去,以防万一有用

    你的问题无法解析。你说你在“load(sub_name(i.name)”一行遇到了崩溃,但你发布的代码中甚至没有这一行。试着一步一步地解决你的问题,检查并确认你理解每一步发生的事情。然后,当你遇到一个导致问题的步骤时,试着编写一些只执行该步骤的代码,并将其作为示例发布。嗨,马克,谢谢你的建议。在我最初的帖子中,我没有意识到我的剧本的开头没有包括在内……我已经改变了这一点。从那以后,我尝试了不同的方法来解决这个问题,但没有成功。