>我有几个.mat文件的目录。我使用以下代码打开它们。
files = dir('*.mat');
for i=1:length(files)
eval(['load ' files(i).name ]);
end
然后,我将工作区中的所有文件作为结构获取。它们都有相同的字段,我想访问所有这些字段中名为 .data 的字段。我尝试首先使用以下方法保存结构的名称:
waveNames = whos
但是我无法使用存储在那里的信息访问对象。 有人可以帮助我吗?
谢谢
正如@Justin评论中所建议的那样,最好的办法是将 MAT 文件读入单元格数组。
您不必使用eval
,您可以使用load
的功能形式。在 MATLAB 中总是如此:
func arg
与
func('arg')
所以你可以做到:
files = dir('*.mat');
vars = cell(size(files));
for ii = 1:numel(files)
vars{ii} = load(files(ii).name);
end
现在,每个vars{ii}
都是一个结构,其中字段名称是文件中的变量。使用fieldnames(vars{ii})
获取可用的变量列表。
假设每个文件都有一个名为data
的变量,在一个循环中你可以访问vars{ii}.data
。您可以使用cellfun
对每个data
元素执行相同的操作。
可以将文件读入结构数组而不是单元格数组,但您需要每个文件包含完全相同的变量集,否则赋值将不起作用:
files = dir('*.mat');
vars = struct();
vars(size(files)).data = []; % pre-allocate the vars array
for ii = 1:numel(files)
vars(ii) = load(files(ii).name);
end
现在您有vars(ii).data
,它比在单元格数组中更容易管理。例如,您可以使用cat(3,vars.data)
检索所有data
元素,如果它们都是相同类型和大小的矩阵。
但是,如果您只想从每个文件中读取data
元素,这将更方便:
files = dir('*.mat');
data = cell(size(files));
for ii = 1:numel(files)
vars = load(files(ii).name,'data');
s{ii} = vars.data;
end
现在,每个s{ii}
都是文件编号ii
中的data
变量。
根据下面的评论,如果我理解正确,每个文件AD0_1.mat
都包含一个结构AD0_1
,其中包含一个字段data
。这可以理解如下:
files = dir('*.mat');
data = cell(size(files));
for ii = 1:numel(files)
vars = load(files(ii).name,files(ii).name);
s{ii} = vars.(files(ii).name).data;
end