大家好,我写了一个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个值。我真的希望你能帮忙我!
答案 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)迭代后将数据附加到文件中,在这种情况下,不需要公共数组。由于您的数据长度相同,因此在循环结束时重新使用重用变量是不必要的,但是当您的数据长度不同时,最好记住防止错误的必要性。