如何循环读取和合并 .mat 文件

how to make a loop for reading and merging .mat files

我正在尝试从指定文件夹中读入 .mat 文件。我想按连续顺序一次加载它们两个,将它们合并在一起,将我想要的列数保存为一个新的 .mat 文件,并对所有文件继续这样做(我最终会有很多)。

每个 .mat 文件具有相同数量的变量和列长度。它们代表一天的数据,所以 24 列是 24 小时,我希望它包含 25 小时。

这是我完成的一个示例,说明了我想要实现的目标,但不确定如何正确循环遍历文件夹中的所有文件并保存新文件:

folder_dir = ('myfolder');
mat_files = dir(fullfile(folder_dir, '*.mat')); 

for i = 1:(length(mat_files)) 

A = load(mat_files(i));
B = load(mat_files(i+1)); 
AB = [A,B];

var1 = [AB.var1]; % concatenate so each file is now 2 days of data (48 hours) 
var2 = [AB.var2];

var1 = var1(:,(1:25)); % extract the first 25 columns (25 hours)
var2 = var2(:,(1:25));

% save them all as final .mat files with 25 time levels
save 2019_sample1.mat var1 var2 

end 

所以我希望能够遍历我所有的 .mat 文件,将上一个文件与下一个文件合并并提取第一个 25 个时间级别并另存为新的 .mat 文件。

任何关于如何制作循环的帮助都会很棒。谢谢

我假设您在以编程方式加载和保存 文件时遇到问题。 您可以使用函数 dir() 访问 MATLAB 中的文件列表。 对于以编程方式加载/保存,我建议使用 函数语法 save() and load() 而不是 命令语法 saveload

这是我要使用的示例脚本。这假设您使用的输入目录只有 .mat 个文件。阅读 this thread 以详细了解此脚本的工作原理。

input_path = './your_data_dir/' % Set the directory you will be loading your data from
output_path = './your_output_dir/' % Set the directory you want to save the output to
list = dir(input_path); % Get list of files
file_list = {list.name}; % Store filenames in a cell array
file_list(1:2) = []; % Delete the inodes '.' and '..' from files list

% Loop through each file in the directory, from file 1 to file N-1
for i = 1:(length(file_list)-1)
    % Get file names, use curly brackets to extract string from cell array
    file_A = file_list{i}; 
    file_B = file_list{i+1};

    % Load the data
    var_A = load(file_A);
    var_B = load(file_B);

    % Format data
    var_combine = [var_A, var_B];

    % Your Code
    var1 = [var_combine.var1]; 
    var2 = [var_combine.var2];
    var1 = var1(:,(1:25));
    var2 = var2(:,(1:25));

    % Use sprintf() to automatically generate filenames
    save_name = sprintf("%scombined_data_%d", output_path, i);

    % Save data
    % Note the quote marks for `var1` and `var2`, they are required
    save(save_name, 'var1', 'var2')
end