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

时间:2015-05-29 17:03:11

标签: matlab cell-array

Matlab结构数组是否可以转换为单元数组而无需迭代数组?

我希望struct数组中的每个结构都成为单元数组中的一个单元格。命令struct2cell似乎没有这样做,因为它将结构中的每个字段分成一个单独的单元格。

已发布到:

2 个答案:

答案 0 :(得分:5)

尝试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

答案 1 :(得分:1)

实际上,我并不认为我想要做的事情是必要的。让我解释一下,以防万一其他人不能走同样的道路。

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

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

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

然而,我发现实际上有一个完整的帮助页面标题为"逗号分隔列表"表明结构的行为方式相同。所以上面逗号分隔的列表等于myStruc(:)。fieldX.subfieldA。

事实上,将struct数组转换为单元数组是不行的,因为在单元数组的大括号索引之后,你不能使用点索引来访问字段。例如,如果有一种矢量化方式将myStruct(i)转换为myCell(i),我希望能够生成

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

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

获得的经验教训:直接使用struct array indexing来访问struct字段&个子场。

***** CAVEAT *****

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

好吧,好吧。 :(