【问题标题】:MATLAB: extracting onsets in different files and saving them in different filesMATLAB:在不同文件中提取起始点并将它们保存在不同文件中
【发布时间】:2010-09-21 14:57:47
【问题描述】:

我的 MATLAB 脚本是:

  1. 从 MATLAB 文件中提取四个不同的fMRI 起始点(文件名为“主题 06 数据”、“主题 05 数据”等)

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

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

我面临两个问题:

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

这是我得到的错误:

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

==> Gender_onsets_script_2 在 16 时出错
加载(子名称(i).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

【问题讨论】:

  • 您的问题无法解析。您说您在 'load(sub_name(i).name)' 行遇到了崩溃,但这甚至不是您发布的代码中的一行。尝试逐步解决您的问题,检查以验证您了解每一步发生的情况。然后,当您遇到导致问题的步骤时,请尝试编写一些仅执行该步骤的代码并将其作为示例发布。
  • 嗨,马克,感谢您的建议。在我原来的帖子中,我没有意识到我的脚本的开头没有被包括在内......我已经改变了这一点。从那以后,我尝试了不同的方法来解决这个问题,但都没有成功。

标签: matlab


【解决方案1】:

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

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

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

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


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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-06
    • 2021-10-20
    • 1970-01-01
    • 2023-03-03
    相关资源
    最近更新 更多