我有一个包含一些.mat文件的目录,我想将所有这些文件加载到一个数组中。我试过这样的东西:;
x1=load('C:UsersmeOneDriveDesktopprojectafirst_file.mat')
x2=load('C:UsersmeOneDriveDesktopprojectasecond_file.mat')
对目录中的所有文件以此类推,最后我想有一个数组,这样:
arr(1)=x1 ...
如何访问目录并同时将所有文件加载到数组中?
ps:我试过使用path before和dir,但后来我得到了这个错误:
使用eval、undfind函数"workspacefun"进行输入时出错结构类型的参数
提前感谢您。
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')
。