2016-04-25 7 views
0

Ich habe ein Array von Klassen (wir nennen es a, Größe Mx1), die eine Eigenschaft (feature) enthält, die ein 1xN-Array enthält. Ich versuche, eine neue Matrix zu erhalten, die MxN ist, die Zeilen von jeder der feature-Eigenschaft der Objekte enthält. Zum Beispiel:Matrix der Objekte Array-Eigenschaften

M = 3 
N = 4 
a(1,1).feature = [1 2 3 4] 
a(2,1).feature = [5 6 7 8] 
a(3,1).feature = [9 10 11 12] 

dann, da eine Funktion, wäre die Antwort am Ende als:

ans = [1 2 3 4; 5 6 7 8; 9 10 11 12] 

Derzeit, ich habe mit dem folgenden:

ans = cell2mat({a.feature}') 

aber ich fühle mich Es sollte einen Weg geben, dies zu tun, ohne in eine Zelle konvertieren zu müssen, die Dimensionen zu wechseln und dann in eine Matrix umzuwandeln. Habe ich Recht oder wäre das der beste Weg, das Problem zu lösen? Ich konnte keine solche Funktion in der Dokumentation finden.

Antwort

1

Wenn Sie über ein Array von Objekten verfügen und auf eine Eigenschaft mit Punktreferenz zugreifen, wird comma separated list zurückgegeben. Diese durch Kommas getrennte Liste can be passed to a function und wird als mehrere Eingabeargumente angezeigt.

In Ihrem Fall können Sie diese kommagetrennte Liste an cat übergeben und angeben, dass jeder Wert entlang der ersten Dimension mit dem nächsten verkettet werden soll. So würde dies einfach geworden:

features = cat(1, a.feature) 

%// 1  2  3  4 
%// 5  6  7  8 
%// 9 10 11 12 

Dies ist funktional äquivalent zu:

features = cat(1, a(1).feature, a(2).feature, a(3).feature, ..., a(end).feature); 
Verwandte Themen