我正在尝试将结构数组转换为矩阵。结构的每个字段存储一个最多可达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
函数,但它不存在。有没有更简单的方法来完成我不知道的任务?
答案 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
这有帮助吗?