想象你有一个单元阵列"测试"有两个维度" e"和" f"不同大小。是否可以将此维度转换为结构,而另一维转换为子结构?它适用于循环,但我不喜欢循环。因为结构是空的,然后我才能安排在带有[...]的数组中。
StrA.SubA.SubSubA=struct('SubSubSubA',[],'SubSubSubB',[]);
count_e=4;
count_f=2;
for e=1:count_e
for f=1:count_f
StrA.SubA(e,1).SubSubA(f,1).SubSubSubA=test{e,f};
end
end
提前致谢
答案 0 :(得分:1)
您可以使用struct
,num2cell
和几个transposes进行无循环:
test = num2cell(rand(4, 2)); % Sample 4-by-2 cell array of random data
StrA = struct('SubA', struct('SubSubA', num2cell(struct('SubSubSubA', test, ...
'SubSubSubB', []).', 1)).');
虽然我不知道它是否比基于循环的解决方案更快或更易读。
我还应该注意,在基于循环的解决方案中,只有子结构StrA.SubA(1).SubSubA(1)
和StrA.SubA(1).SubSubA(2)
会有SubSubSubB
字段。 StrA.SubA(2:4)
中的所有其他子结构只包含字段SubSubSubA
。