MATLAB:如何有效地读取这些数据文件?

时间:2015-11-15 03:36:04

标签: matlab

我在名为“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

但是,有两件事我不喜欢我的代码。

  1. 目前文件有随机名称,我需要手动将所有名称更改为“File_1.dat”,“File_2.dat”等。

  2. 代码繁琐且难以阅读。

  3. 我怎么能做得更好?

2 个答案:

答案 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