循环多个科目/会话

时间:2017-12-04 17:05:28

标签: matlab for-loop cell

大家好,我写了一个for循环,我想在一个主题的多个会话中使用。我有一个数据路径:C:\ Users \ Rouve \ Documents \ Promotion \ tDCS \ DATA \ VP01 \其中有三个文件夹:Session1,Session2,Session3。这些文件夹中的每一个都包含15个文本文件(test1.txt,test2.txt ... test15.txt)。我的目标是运行for循环,在一个会话中加载15个文件,将它们放入一个单元格中,提取该单元格内每个数据集的最大值,然后在所有会话中平均每三个最大值并将它们放入一个最终文件,所以我会得到每个会话5个值。 当我为一个会话运行循环时,它的工作方式如下:

using

我似乎无法弄清楚如何构造for循环,因此它会自动为所有三个会话执行此操作并输出三个变量,包含会话01,会话02和会话03的5个值。我真的希望你能帮忙我!

1 个答案:

答案 0 :(得分:0)

您可以使用[]连接字符串,就像创建常规数组一样,然后处理循环中的每个文件夹,同时将平均数据存储在公共数组中,

subdir = {'Session1', 'Session2', 'Session3'};

Mean_values = zeros(3,5);
for nv = 1:3
    Volume_name=['C:\Users\Rouve\Documents\Promotion\tDCS\DATA\VP02\', char(subdir{nv})]

    files=dir(fullfile(Volume_name,'*.txt'));
    files={files.name}';
    files_sorted=natsortfiles(files);
    fileName=ls('*txt');

    data = cell(numel(files_sorted),1);                %# store file contents
    for i=1:numel(files_sorted)
        fname = fullfile(Volume_name,files_sorted{i});     %# full path to file
        data{i} = dlmread(fname, '\t', 19, 1);        %# load file
    end
    for i=1:length(data) %# get Max values of each trial (15 per session in total)
            MaxValues(i)=max(data{i});
    end
    MaxValues=MaxValues';

    Mean_values(nv, :)=mean(reshape(MaxValues,3,[]));

    % Reset the data and MaxValues cell
    data = {};
    MaxValues = [];
end

save('mean_out.txt', 'Mean_values', '-ascii')

我不确定我是否理解正确(如果没有,请澄清) - 但你想要一个输出文件,每个文件夹有5个方法。这就是这个程序的作用 - 对于每个文件夹,它找到5个均值并将它们存储在公共数组Mean_values的一行中。在处理完所有目录之后,它使用matlab save命令将公共数组保存到文件'mean_out.txt'中,用于ascii格式。

由于您的程序不易重现,我没有检查 - 如果您遇到错误,请告诉我。

这也是一种可能性 - 还有其他一种可能性,比如在每次外循环(nv)迭代后将数据附加到文件中,在这种情况下,不需要公共数组。由于您的数据长度相同,因此在循环结束时重新使用重用变量是不必要的,但是当您的数据长度不同时,最好记住防止错误的必要性。