将 Matlab 结构数组转换为元胞数组

Convert Matlab struct array to cell array

是否可以在不遍历数组的情况下将 Matlab 结构数组转换为元胞数组?

我希望结构数组中的每个结构成为元胞数组中的一个元胞。命令 struct2cell 似乎没有执行此操作,因为它将结构中的每个字段分解为一个单独的单元格。

已发布至:

尝试 num2cell:

myStructCell = num2cell(myStruct);

例如:

>> myStruct(1).name = 'John';
>> myStruct(2).name = 'Paul';
>> myStruct

myStruct = 

1x2 struct array with fields:

    name

>> myStructCell = num2cell(myStruct)

myStructCell = 

    [1x1 struct]    [1x1 struct]

>> myStructCell{1}

ans = 

    name: 'John'

>> myStructCell{2}

ans = 

    name: 'Paul'

>> myStructCell{2}.name

ans =

Paul

其实我觉得我做的事情没有必要。让我解释一下,以防其他人走同样的路。

上面的动机是我想从struct数组中的所有结构中提取某个子字段并将其以逗号分隔列表的形式存在:

myStruc(1).fieldX.subfieldA, ...
myStruc(2).fieldX.subfieldA, ...
myStruc(3).fieldX.subfieldA

我知道我可以通过 myCellArray{:} 将所有单元格索引到一维单元格数组中来生成逗号分隔列表。

但是,我发现实际上有一个名为 "Comma-Separated Lists" 的完整帮助页面显示结构的行为方式相同。所以上面的逗号分隔列表等于 myStruc(:).fieldX.subfieldA.

事实上,将结构数组转换为元胞数组是行不通的,因为在对元胞数组进行花括号索引之后,您不能使用点索引来访问字段。例如,如果有一种将 myStruct(i) 转换为 myCell(i) 的矢量化方法,我希望能够生成

myCellArray{1}.fieldX.subfieldA, ...
myCellArray{2}.fieldX.subfieldA, ...
myCellArray{3}.fieldX.subfieldA

通过表达式 myCell{:}.fieldX.subfieldA。花括号后的点索引是语法错误。

经验教训:直接使用结构数组索引来启用对结构字段和子字段的访问。

***** 注意事项 *****

我只测试了使用多级点索引结合标量数值数组索引生成逗号分隔列表,例如 myCellArray{2}.fieldX.subfieldA。当使用向量数字索引代替标量值 2 时,它不起作用,即 Matlab 无法处理 myCellArray{:}.fieldX.subfieldA 或 myCellArray{2:3}.fieldX.subfieldA.

好吧。 :(