Matlab中的动态结构生成

Mar*_*n08 3 matlab

我有一个字段名列表,并希望生成一个嵌套的结构.我试过这个:

fn1 = {'a', 'b', 'c'};
fn2 = {'d', 'e', 'f'};
s = struct();
for n1=fn1
  for n2=fn2
    s.(n1).(n2) = 0 ;
  end
end
Run Code Online (Sandbox Code Playgroud)

但Matlab抱怨表示".{fieldname)"仅用于动态结构引用("动态结构引用的参数必须计算为有效的字段名称.").

我知道一个有效的解决方案是使用isfield()和struct()遍历字段名称.那么如何在不使用isfield()和struct()的情况下实现这一目标,例如通过一些匿名函数和向量化?谢谢

Jon*_*nas 5

您的主要问题是n1并且n2是单元数组,它们不是有效的结构名称.因此,写作

s.(n1{1}).(n2{1}) = 0;
Run Code Online (Sandbox Code Playgroud)

修复错误.

但是,更好的方法可能是使用CELL2STRUCT来创建s:

s2 = cell2struct(cell(size(fn2(:))),fn2(:));
s = cell2struct(repmat({s2},size(fn1(:))),fn1(:))
Run Code Online (Sandbox Code Playgroud)