Arrays 将嵌套结构数组重塑为具有不同大小元素的单元数组
在MATLAB中,我有一个以下形式的结构数组:Arrays 将嵌套结构数组重塑为具有不同大小元素的单元数组,arrays,matlab,struct,Arrays,Matlab,Struct,在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(
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的更快的解决方案?可能是某个
重塑命令?您可以从a.b
创建一个结构数组,然后从数组中提取字段c
ab = [a.b];
result = {ab.c}
为了好玩,这里是rahnema1答案的一行版本:
[result{1:numel(a)}] = subsref([a.b], substruct('.','c'));
不过,我强烈建议您不要在野外使用它,几乎没有人一读就明白这一点(这是一个很好的编码经验法则)。感谢您的解决方案。请你们看一下我的,不同形式的嵌套结构。