在matlab中将单元格转换为结构

时间:2014-07-03 15:07:18

标签: matlab structure cell

我正在尝试将单元格转换为结构:

A = {'p1', 10, 'ny'; 'p2', 12, 'nj'};

我想要一个有3个字段的结构

A.person = {'p1';'p2'}
A.age = [10;12]
A.state = {'ny', 'nj'}

我尝试过cell2struct但是我的格式是我不想要的。 我知道我错过了一些简单的事情。有什么想法吗?

2 个答案:

答案 0 :(得分:4)

cell2struct有什么问题?让

>> fields = {'person','age','state'}; %// field names

您可以使用以下三种版本之一:

>> S = cell2struct(A, fields, 2); %// fold 2nd dim into fields
S = 
2x1 struct array with fields:
    person
    age
    state

(给出2x1结构数组)。

>> S = cell2struct(mat2cell(A.', ones(1,size(A,2))), fields, 1)
S = 
    person: {'p1'  'p2'}
       age: {[10]  [12]}
     state: {'ny'  'nj'}

(给出一个1x1结构数组,每个字段中有一个行单元格数组。)

>> S = cell2struct(mat2cell(A, size(A,1), ones(1,size(A,2))), fields, 2)
S = 
    person: {2x1 cell}
       age: {2x1 cell}
     state: {2x1 cell}
>> S.person
ans = 
    'p1'
    'p2'

(给出一个1x1结构数组,每个字段中有一个列单元格数组)

答案 1 :(得分:1)

鉴于结果应该具有不同的arity,具体取决于字段,一种方法是从这开始:

A = {'p1', 10, 'ny'; 'p2', 12, 'nj'};

继续这个:

A = struct(                     ...
   'person', {A(:,1)},          ...
   'age',    cell2mat(A(:,2)),  ...
   'state',  {A(:,3)'}          ...
);