在matlab中用动态名称保存分支结构的字段
Save fields of branched structure with dynamic names in matlab
我需要知道如何在 MATLAB 中只保存结构的一个分支。
该结构包含更多级别,每个级别有更多字段。例如:
data.level1.level21
data.level1.level22
我现在想单独保存分支 data.level1.level21
和 data.level1.level21
。我尝试了以下但它不起作用:
firstLevelName = fieldnames(data);
secondLevelNames = fieldnames(data.(firstLevelName{1}));
for pL = 1:length(secondLevelNames)
save([filename '.mat'], '-struct', 'data', firstLevelName{1}, secondLevelNames{pL});
end
您使用的结构保存方法 trying to use 并不像您期望的那样有效。结构变量名称后的所有参数都是要保存的 that 结构的字段。
MATLAB 解释您的代码的方式是您试图保存 data
的 level1
和 level21
字段,这显然不起作用,因为 level21
是 level1
not data
.
的子字段
要保存嵌套字段,最简单的方法可能是创建一个指向结构 data.level
的新变量,然后对其调用 save
并指定要保存的特定字段。
level1 = data.level1;
for pL = 1:numel(secondLevelNames)
save(filename, '-struct', 'level1', secondLevelNames{pL});
end
如果您确实想要在保存的数据中进行双重嵌套,则需要创建一个仅包含所需数据的新结构,然后保存它。
for pL = 1:numel(secondLevelNames)
newstruct = struct(firstLevelName{1}, struct());
newstruct.(secondLevelNames{pL}) = data.(firstLevelName{1}).(secondLevelNames{pL});
save(filename, '-struct', 'newstruct')
end
我需要知道如何在 MATLAB 中只保存结构的一个分支。 该结构包含更多级别,每个级别有更多字段。例如:
data.level1.level21
data.level1.level22
我现在想单独保存分支 data.level1.level21
和 data.level1.level21
。我尝试了以下但它不起作用:
firstLevelName = fieldnames(data);
secondLevelNames = fieldnames(data.(firstLevelName{1}));
for pL = 1:length(secondLevelNames)
save([filename '.mat'], '-struct', 'data', firstLevelName{1}, secondLevelNames{pL});
end
您使用的结构保存方法 trying to use 并不像您期望的那样有效。结构变量名称后的所有参数都是要保存的 that 结构的字段。
MATLAB 解释您的代码的方式是您试图保存 data
的 level1
和 level21
字段,这显然不起作用,因为 level21
是 level1
not data
.
要保存嵌套字段,最简单的方法可能是创建一个指向结构 data.level
的新变量,然后对其调用 save
并指定要保存的特定字段。
level1 = data.level1;
for pL = 1:numel(secondLevelNames)
save(filename, '-struct', 'level1', secondLevelNames{pL});
end
如果您确实想要在保存的数据中进行双重嵌套,则需要创建一个仅包含所需数据的新结构,然后保存它。
for pL = 1:numel(secondLevelNames)
newstruct = struct(firstLevelName{1}, struct());
newstruct.(secondLevelNames{pL}) = data.(firstLevelName{1}).(secondLevelNames{pL});
save(filename, '-struct', 'newstruct')
end