我正在尝试从指定的文件夹中读取.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()
和load()
,而不是命令语法save
和load
这是我要使用的一个脚本示例。这假设您使用的输入目录将只有.mat
文件。阅读此线程,了解此脚本如何工作的详细步骤。
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