将单元格转换为空嵌套结构

时间:2017-08-08 14:52:06

标签: matlab struct cell

想象你有一个单元阵列"测试"有两个维度" 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

提前致谢

1 个答案:

答案 0 :(得分:1)

您可以使用structnum2cell和几个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