2016-09-24 5 views
3

Angenommen, ich habe eine Struktur namens I der Größe n * 1, mit mehreren Feldern, von denen eines zum Beispiel 'Bereich' genannt wird. Wenn ich den Code unten versuchen:So extrahieren Sie alle Werte aus einem bestimmten Feld einer n * 1 Struktur in Matlab

area = I.area 

die resultierende Fläche hat nur den Wert eines, das von der letzten Position der Struktur kommt. Gibt es eine schnelle Möglichkeit, alle Werte im Feld exakt, mit Ausnahme der Schleife wie folgt:

for ii = 1:n; area(ii) = I(ii).area; end 

Antwort

1

einfache Verwendung [] um die Struktur in der horizontalen Verkettung aller Werte führen. Wenn Sie sie stattdessen entlang einer anderen Dimension verketten möchten, können Sie cat verwenden, um dies explizit anzugeben. Dadurch können Sie Felder besser behandeln, die mehrere Werte enthalten können.

% Concatenate them along the first dimension 
out = cat(1, I.area); 

% Concatenate them along the third dimension 
out = cat(2, I.area); 

Alternativ, wenn die Felder sind alle verschiedenen Dimensionen, dann drehen sie in eine cell

out = {I.area}; 
+0

Danke für Ihre Antwort !! – jingweimo

1
area = [I.area] 

I.area gibt alle Werte von I(1).area, I(2).area ... als durch Kommata getrennte Liste, die kann überall dort angeschlossen werden, wo eine solche Liste erwartet wird, z Funktionsparameterliste oder Array-Initialisierung.

EDIT: Wenn I(i).area ein Zeilenvektor mit gleicher Größe ist. Dann können Sie zunächst alle von ihnen verketten horizontal, dann auf die gewünschte Dimension neu zu gestalten:

area = reshape([I.area], [2 length(I)])' 

Ergebnis:

>> I.area 

ans = 

    3  4 


ans = 

    5  6 


ans = 

    7  8 

>> reshape([I.area], [2 length(I)])' 

ans = 

    3  4 
    5  6 
    7  8 
+0

Es funktioniert, wenn der Bereich Feld einen Wert in jeder Position aufweist, wie beispielsweise I (1) .area = 1. Was ist, wenn der Eintrag zwei Werte I (1) .area = [1, 2] hat? Ist es möglich, diese Werte genauso zu extrahieren, wie sie als Matrix strukturiert sind und nicht zu einer Spalte oder Zeile geformt sind? Zum Beispiel: – jingweimo

+0

Wenn ich (1) .area = [1, 2], I (2) .area = [3, 4], möchte ich die Ausgabe ist [1, 2; 3, 4]. – jingweimo

+0

Wenn Sie Fälle ansprechen möchten, in denen "area" ein 2x1-Vektor ist, sagen Sie dies bitte beim nächsten Mal explizit in Ihrer Frage, damit die Antwortenden nicht raten müssen, was Sie wirklich meinen. Und diese Linie 'Bereich (ii) = I (ii) .area;' deutet stark an, dass 'I.area' ein Skalar ist. Wie auch immer, ein Vektor' Bereich' kann leicht mit 'Umformen' gehandhabt werden. Ich habe meine Antwort bearbeitet, um das zu reflektieren. –

Verwandte Themen