Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 如何循环读取和合并.mat文件_Matlab_Loops_For Loop_Mat File - Fatal编程技术网

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

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

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


任何关于我如何做循环的帮助都会很好。谢谢

我想您在以编程方式加载和保存文件时遇到了问题。 您可以使用该函数访问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文件。谢谢,工作非常完美!