我在名为“Experiment1”的文件夹中有100个数据文件,我需要从中获取所有数据并将它们放入单个矩阵中。每个数据文件包含15列和40行数据。
文件在文件夹中的顺序是任意的。它们以什么顺序放入组合矩阵无关紧要。
我使用dlmread
编写了一些代码来完成这项工作:
for i = 1:100
%% Read in the relevant file.
filename = ['File_' int2str(i) '.dat']
Data = dlmread(fullfile(pwd, 'Experiment1',filename));
%% Put all the data I need in a separate matrix
NeededData(1+((i-1)*40):i+((i-1)*40)-i+40,1:15) = Data(:,1:15);
end
但是,有两件事我不喜欢我的代码。
目前文件有随机名称,我需要手动将所有名称更改为“File_1.dat”,“File_2.dat”等。
代码繁琐且难以阅读。
我怎么能做得更好?
答案 0 :(得分:1)
由于您已修复了使用dir
定义要读取的文件名称的问题,因此可以改进将读取数据(Data
)添加到输出矩阵的方式({ {1}})。
您可以通过直接在赋值语句中插入NeededData
的调用来同时读取输入文件并将数据添加到输出矩阵中:
dlmread
如果您更喜欢使用inides(在原始方法中),因为您事先知道所有文件具有相同的(40)行数),您可以按如下方式简化表示法:
files=dir('*.dat');
n_files=length(files)
% Initialize the output matrix as empty
NeededData_0=[]
for i=1:n_files
% Simultaneously read input file and assign data to the output matrinx
NeededData_0=[NeededData_0;dlmread(files(i).name)]
end
希望这有帮助。
答案 1 :(得分:0)
使用建议在答案中使用dir
我已经制作了以下代码,这显然是对我早期工作的改进。我希望进一步改进,或建议采用其他方法。
files = dir('*.dat');
for i = 1:length({files.name})
%% Read in the relevant file.
Data = dlmread(files(i).name);
%% Put all the data I need in a separate matrix
NeededData(1+((i-1)*40):i+((i-1)*40)-i+40,1:15) = Data(:,1:15);
end