将结构数组转换为矩阵

时间:2016-03-31 22:22:20

标签: matlab

我正在尝试将结构数组转换为矩阵。结构的每个字段存储一个最多可达520000行的向量。单个结构数组中最多可以有20个字段,但各个字段的行数相同。

作为缩小的示例,请考虑结构s,其中每个字段都是整数:

s=struct('a',1,'b',2);
s(2)=struct('a',3,'b',4);
s=s';

在所需的输出中,每个字段将对应一列。 a值将位于第一列,而b值将位于第二列:

desiredOutput = [1 2; 3 4];

我已经间接地接近了这个问题:

cell2mat(struct2cell(s))'

然而,这涉及两个转换,由于我的结构表现良好,我觉得这是不必要的。

我还使用for循环来解决这个问题:

fields = fieldnames(s);
nrows = size(s,1);
ncols = numel(fields);
desiredOutput = nan(nrows,ncols);
for jj=1:ncols
    desiredOutput(:,jj) = [s.(fields{fields(jj)})]';
end

我希望找到一个struct2mat函数,但它不存在。有没有更简单的方法来完成我不知道的任务?

1 个答案:

答案 0 :(得分:1)

我写了类似的东西。所以,如果你不介意的话,我会有点'把它复制到这里。

data(1,1).val = 1; 
data(1,2).val = 2; 
data(2,1).val = 3; 
data(2,2).val = 4;

这会为2x2 struct提供字段val

A = reshape([data.val],size(data))

现在,A看起来像[ 1 2 : 3 4]

A =
      1 2
      3 4

这有帮助吗?