Matlab 如何循环读取和合并.mat文件
我正在尝试从指定文件夹读入.mat文件。我希望以连续的顺序一次加载两个,将它们合并在一起,将所需的列数保存为一个新的.mat文件,并继续对所有文件执行此操作(我最终会有很多) 每个.mat文件都有相同数量的变量和列长度。它们代表一天的数据,所以24列是24小时,我希望它包含25小时 下面是一个我想实现的示例,但不确定如何正确循环文件夹中的所有文件并保存新文件:Matlab 如何循环读取和合并.mat文件,matlab,loops,for-loop,mat-file,Matlab,Loops,For Loop,Mat File,我正在尝试从指定文件夹读入.mat文件。我希望以连续的顺序一次加载两个,将它们合并在一起,将所需的列数保存为一个新的.mat文件,并继续对所有文件执行此操作(我最终会有很多) 每个.mat文件都有相同数量的变量和列长度。它们代表一天的数据,所以24列是24小时,我希望它包含25小时 下面是一个我想实现的示例,但不确定如何正确循环文件夹中的所有文件并保存新文件: folder_dir = ('myfolder'); mat_files = dir(fullfile(folder_dir, '*.m
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文件
任何关于我如何做循环的帮助都会很好。谢谢我想您在以编程方式加载和保存文件时遇到了问题。 您可以使用该函数访问MATLAB中的文件列表。 对于以编程方式加载/保存,我建议使用函数语法,而不是命令语法
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
写for循环的哪个部分有问题?我不知道如何一次只读取两个.mat文件并合并它们?你的意思不太清楚。您已经在显示的代码中一次读取了两个mat文件。谢谢,工作非常完美!