2016-03-31 24 views
1

Bir yapı dizisini matrise dönüştürmeye çalışıyorum. Yapının her alanı, 520000 satıra kadar ulaşabilen bir vektör saklar. Tek bir yapı dizisinde 20'ye kadar alan olabilir, ancak satırların sayısı alanların genelinde aynıdır. Bir aşağı olarak Yapı dizisini matrise dönüştürme

örnekte, her alan bir tam sayı olduğu yapı s dikkate ölçekli: İstenen çıktıda

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

, her bir alan bir sütuna karşılık gelir. Bir dolaylı olarak bu yaklaştı

desiredOutput = [1 2; 3 4]; 

: Ancak

cell2mat(struct2cell(s))' 

, bu i bulan iki dönüşümler içerir b değerlerinin ikinci olacak ise a değerleri, birinci sütunda gösterilir Yapımın iyi huylu yapısı nedeniyle gereksiz.

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 

Bir struct2mat fonksiyonu bulmak için ümit ama yok:

Ben de döngü için kullanarak bu yaklaştık. Farkında olmadığım bu görevi gerçekleştirmenin daha basit bir yolu var mı?

cevap

1

Yazılıma benzer bir şey yaşadım. Yani, eğer sakıncası yoksa, bunu buraya kopyalayacağım.

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

Bu alanda val ile 2x2 struct verir. Bu [ 1 2 : 3 4]

A = 
     1 2 
     3 4 

bu yardım mı gibi

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

Şimdi, A görünüyor?

+0

Bu ilginç bir yaklaşım, ancak biraz farklı bir durum için. Bu yaklaşımın çalışması için aynı alan adlarına sahip olmanız gerekir, benim kullanımımda ise farklıdır, ancak paylaşım ve paylaşım için teşekkürler – brodoll

İlgili konular