2016-03-31 26 views
1

構造体配列を行列に変換しようとしています。構造体の各フィールドには、最大520000行まで到達できるベクトルが格納されます。 1つの構造体配列には最大20のフィールドがありますが、フィールドの行数は同じです。ダウンスケーリングされた一例として構造体配列を行列に変換する

、各フィールドは整数構造s、検討:所望の出力で

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

を、各フィールドは、列に対応します。 b値は第二になりつつa値は、最初の列になります。

desiredOutput = [1 2; 3 4]; 

Iは間接的な方法でこれに近づいた:

cell2mat(struct2cell(s))' 

しかし、これは私が見つける2つの変換を含みます私の構造のよく振る舞う性質のために不要です。

私はまた、このforループを使用して近づいてきた:私はstruct2mat機能を見つけることを望んだが、それは存在しません

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 

を。私が気づいていないこの作業を達成するための簡単な方法はありますか?

答えて

1

私はこれと同様のものを書きました。あなたが気にしないなら、私はちょっとここでそれをコピーします。

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

これはフィールドval2x2 structを与えます。この[ 1 2 : 3 4]

A = 
     1 2 
     3 4 

がその助けをいよう

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

は今、Aに見えますか?

+0

興味深いアプローチですが、少し異なる場合があります。このアプローチが機能するには、同一のフィールド名を使用する必要がありますが、使用例は異なりますが、共有して試してみてください – brodoll