【问题标题】:how to make a loop for reading and merging .mat files如何为读取和合并 .mat 文件创建一个循环
【发布时间】:2021-07-09 16:33:08
【问题描述】:

我正在尝试从指定文件夹中读取 .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 文件。

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

【问题讨论】:

  • 你在编写 for 循环的哪一部分遇到了问题
  • 我不确定如何一次只读取两个 .mat 文件并将它们合并?
  • 你的意思不是很清楚。您已经在显示的代码中一次读取两个 mat 文件

标签: matlab loops for-loop mat-file


【解决方案1】:

我假设您在以编程方式加载和保存文件时遇到问题。 您可以使用函数dir() 访问 MATLAB 中的文件列表。 对于以编程方式加载/保存,我建议使用 函数语法 save()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

【讨论】:

    猜你喜欢
    • 2020-12-23
    • 2018-02-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-04
    相关资源
    最近更新 更多