如何使用MATLAB将多个文件从目录加载到一个数组中?

imzjd6km  于 2022-11-15  发布在  Matlab
关注(0)|答案(1)|浏览(304)

我有一个目录,其中包含一些.mat文件,我想将所有这些文件加载到一个数组中。我尝试了这样的方法:;

x1=load('C:\Users\me\OneDrive\Desktop\project\a\first_file.mat')
x2=load('C:\Users\me\OneDrive\Desktop\project\a\second_file.mat')

..。对于目录中的所有文件依此类推,最后我希望有一个数组,以便:

arr(1)=x1 ...

如何访问该目录并同时将所有文件加载到一个阵列中?
PS:我之前尝试过使用路径和目录,但后来收到以下错误:
对结构类型的输入参数使用eval,undefind函数‘workspaceun’时出错
提前谢谢你。

eqqqjvef

eqqqjvef1#

load函数将.mat文件中的变量及其真实名称加载到当前工作区。如果将x指定为load的输出,则变量名称将显示为名为x的结构的字段。例如,如果first.mat包含v1,则x = load('first.mat')将生成x = struct with fields: v1
因此,在您的例子中,假设您确定每个.mat文件都包含一个变量,您可以编写以下循环来将所有.mat文件加载到单元格数组arr中。

fds = fileDatastore('*.mat', 'ReadFcn', @load);  % assume same folder
files = fds.Files;
for i = 1:length(files)
    % convert one-field struct into array, store in "arr"
    arr{i} = struct2array(load(files{i}));
end

现在,每个arr{i}都将按词典顺序包含一个变量,比如vi。如果.mat文件包含多个变量,则此代码将中断。如果文件位于另一个文件夹中,则可以使用其实际的path和扩展名,如fileDatastore('path', 'ReadFcn', @load, 'FileExtensions','.mat')

相关问题