在MATLAB中,我有一个以下形式的结构数组:
a(1).b.c = rand(1,10);
a(1).b.cSize = length(a(1).b.c);
a(2).b.c = rand(1,11);
a(2).b.cSize = length(a(2).b.c);
a(3).b.c = rand(1,12);
a(3).b.cSize = length(a(3).b.c);
a(4).b.c = rand(1,13);
a(4).b.cSize = length(a(4).b.c);
a(5).b.c = rand(1,14);
a(5).b.cSize = length(a(5).b.c);
a(6).b.c = rand(1,15);
a(6).b.cSize = length(a(6).b.c);
我想创建一个单元数组c
,它包含嵌套结构的不同大小的字段a.b.c
,而不使用for循环。
我尝试了以下内容:
c = {a.b.c}
无法正常工作并返回以下错误消息:
大括号或点索引表达式的预期输出, 但有6个结果。
我到目前为止找到的最佳解决方案如下
cellfun(@(x) x.c, {a.b}, 'UniformOutput', false)
是否有更快的解决方案而不使用cellfun
?也许有些reshape
命令?
答案 0 :(得分:1)
您可以从a.b
创建一个structrue数组,然后从数组中提取字段c
。
ab = [a.b];
result = {ab.c}
答案 1 :(得分:1)
只是为了好玩,这里是rahnema1答案的单行版本:
[result{1:numel(a)}] = subsref([a.b], substruct('.','c'));
我强烈反对你不要在野外使用它,但是在第一次阅读时几乎没有人理解这一点(这是用于编码的一个很好的经验法则)。