将嵌套的struct数组重新整形为具有不同大小的元素的单元格数组

时间:2017-08-07 12:30:16

标签: 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(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命令?

2 个答案:

答案 0 :(得分:1)

您可以从a.b创建一个structrue数组,然后从数组中提取字段c

ab = [a.b];
result = {ab.c}

答案 1 :(得分:1)

只是为了好玩,这里是rahnema1答案的单行版本:

[result{1:numel(a)}] = subsref([a.b], substruct('.','c'));

我强烈反对你不要在野外使用它,但是在第一次阅读时几乎没有人理解这一点(这是用于编码的一个很好的经验法则)。