【问题标题】:convert cell to empty nested structure将单元格转换为空的嵌套结构
【发布时间】:2017-08-08 14:52:05
【问题描述】:

假设您有一个具有不同大小的二维“e”和“f”的单元格数组“test”。是否可以将一维转换为结构,而将另一维转换为子结构?它适用于循环,但我不喜欢循环。因为在我无法用 [...] 排列在数组中之前,结构是空的。

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

提前致谢

【问题讨论】:

  • 为什么你不喜欢循环......如果它有效,我不明白这一点......
  • 如果您不喜欢循环,那么我会避免使用双重嵌套结构。这是太慢/不切实际使用还是只是语法偏好?如果是后者,可能继续前进
  • 当维度长度增加时循环变慢。这是重要的一点。但我也认为具有较少结构化数据库的解决方案更容易处理。也感谢 gnovice。

标签: matlab struct cell


【解决方案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

【讨论】:

    猜你喜欢
    • 2018-02-27
    • 2021-12-01
    • 1970-01-01
    • 2017-03-21
    • 2021-02-09
    • 2019-12-27
    • 1970-01-01
    • 2015-12-11
    • 1970-01-01
    相关资源
    最近更新 更多