【问题标题】:Reshaping nested struct array to cell array having elements with different sizes将嵌套结构数组重塑为具有不同大小元素的单元数组
【发布时间】:2017-08-07 12:30:16
【问题描述】:

在 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 命令?

【问题讨论】:

    标签: arrays matlab struct


    【解决方案1】:

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

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

    【讨论】:

    • 感谢您的解决方案。请你看看我的new question 有不同形式的嵌套结构。
    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-03-10
      • 1970-01-01
      • 1970-01-01
      • 2011-06-26
      • 1970-01-01
      • 2018-02-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多