2016-03-31 214 views
1

我想將結構數組轉換爲矩陣。結構的每個字段存儲一個可以達到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

我有類似的東西寫出來。所以,如果你不介意的話,我會'在這裏複製一下。

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)) 

現在,看起來像這樣[ 1 2 : 3 4]

A = 
     1 2 
     3 4 

這是否幫助?

+0

這是一個有趣的方法,但略有不同的情況。您必須使用相同的字段名才能使用此方法,而在我的使用案例中,它們是不同的,但感謝分享並嘗試 – brodoll