如何访问工作区中每个结构中的相同字段?



>我有几个.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

最新更新