Main Content

Array-Indizierung

In MATLAB® gibt es drei Hauptansätze zum Zugriff auf Array-Elemente auf Basis ihrer Position (Index) im Array. Diese Ansätze sind Indizierung nach Position, lineare Indizierung und logische Indizierung.

Indizierung nach Elementposition

Die gängigste Methode ist die ausdrückliche Angabe der Indizes der Elemente. Um beispielsweise auf ein einzelnes Element einer Matrix zuzugreifen, geben Sie die Zeilennummer des Elements gefolgt von seiner Spaltennummer an.

A = [1 2 3 4; 5 6 7 8; 9 10 11 12; 13 14 15 16]
A = 4×4

     1     2     3     4
     5     6     7     8
     9    10    11    12
    13    14    15    16

e = A(3,2)
e = 10

e ist das Element an Position 3,2 (dritte Zeile, zweite Spalte) von A.

Sie können zudem mehrere Elemente zugleich referenzieren, indem Sie ihre Indizes mit einem Vektor angeben. Beispielsweise können Sie auf das erste und das dritte Element in der zweiten Zeile von A zugreifen.

r = A(2,[1 3])
r = 1×2

     5     7

Um auf Elemente in einem Zeilen- oder Spaltenbereich zuzugreifen, verwenden Sie colon. Beispielsweise können Sie auf die Elemente in der ersten bis einschließlich dritten Zeile und zweiten bis einschließlich vierten Spalte von A zugreifen.

r = A(1:3,2:4)
r = 3×3

     2     3     4
     6     7     8
    10    11    12

Eine alternative Methode zum Berechnen von r besteht darin, das Schlüsselwort end zu verwenden, um die zweite bis einschließlich letzte Spalte anzugeben. So können Sie die letzte Spalte angeben, auch wenn Sie die genaue Anzahl der Spalten in A nicht kennen.

r = A(1:3,2:end)
r = 3×3

     2     3     4
     6     7     8
    10    11    12

Wenn Sie auf alle Zeilen oder Spalten zugreifen möchten, verwenden Sie nur den Doppelpunkt-Operator. Dies gibt beispielsweise die gesamte dritte Spalte von A aus.

r = A(:,3)
r = 4×1

     3
     7
    11
    15

Im Allgemeinen können Sie mittels Indizierung auf Elemente in beliebigen Arrays in MATLAB zugreifen, unabhängig von Datentyp oder Dimensionen. Sie können beispielsweise direkt auf eine Spalte eines datetime-Arrays zugreifen.

t = [datetime(2018,1:5,1); datetime(2019,1:5,1)]
t = 2x5 datetime
   01-Jan-2018   01-Feb-2018   01-Mar-2018   01-Apr-2018   01-May-2018
   01-Jan-2019   01-Feb-2019   01-Mar-2019   01-Apr-2019   01-May-2019

march1 = t(:,3)
march1 = 2x1 datetime
   01-Mar-2018
   01-Mar-2019

Für Arrays mit höheren Dimensionen können Sie die Syntax gemäß den Array-Dimensionen erweitern. Nehmen wir beispielsweise ein numerisches 3x3x3-Array. Greifen Sie auf das Element in der zweiten Zeile, dritten Spalte und im ersten Blatt des Arrays zu.

A = rand(3,3,3);
e = A(2,3,1)
e = 0.5469

Weitere Informationen zum Arbeiten mit mehrdimensionalen Arrays finden Sie unter Multidimensional Arrays.

Indizierung nach einzigem Index

Eine weitere Methode für den Zugriff auf die Elemente eines Arrays besteht darin, unabhängig von der Größe oder den Dimensionen des Arrays nur einen einzigen Index zu verwenden. Diese Methode wird als lineare Indizierung bezeichnet. MATLAB zeigt Arrays zwar nach den festgelegten Größen und Formen an; gespeichert werden sie jedoch als einzelne Spalte aus Elementen. Dieses Konzept lässt sich gut mit einer Matrix visualisieren. Das folgende Array wird zwar als 3x3-Matrix angezeigt, MATLAB speichert es jedoch als eine einzige Spalte, in der die Spalten von A aneinandergereiht sind. Der gespeicherte Vektor enthält die Elementreihenfolge 12, 45, 33, 36, 29, 25, 91, 48, 11 und kann mit einem einzelnen Doppelpunkt angezeigt werden.

A = [12 36 91; 45 29 48; 33 25 11]
A = 3×3

    12    36    91
    45    29    48
    33    25    11

Alinear = A(:)
Alinear = 9×1

    12
    45
    33
    36
    29
    25
    91
    48
    11

Das Element 3,2 von A ist 25 und Sie können mithilfe der Syntax A(3,2) darauf zugreifen. Sie können zudem mithilfe der Syntax A(6) auf das Element zugreifen, da 25 das sechste Element der gespeicherten Vektorsequenz ist.

e = A(3,2)
e = 25
elinear = A(6)
elinear = 25

Eine lineare Indizierung mag visuell weniger intuitiv sein, ist aber bei bestimmten Berechnungen, die nicht von der Form oder Größe des Arrays abhängen, sehr leistungsfähig. Beispielsweise können Sie einfach alle Elemente von A summieren, ohne der Funktion sum ein zweites Argument zu übergeben.

s = sum(A(:))
s = 330

Mit den Funktionen sub2ind und ind2sub können Sie die ursprünglichen Array-Indizes in lineare Versionen konvertieren und umgekehrt. Berechnen Sie beispielsweise den linearen Index des Elements 3,2 von A.

linearidx = sub2ind(size(A),3,2)
linearidx = 6

Konvertieren Sie den linearen Index wieder in Zeilen-Spalten-Form zurück.

[row,col] = ind2sub(size(A),6)
row = 3
col = 2

Indizierung nach logischen Werten

Logische Wahr-Falsch-Indikatoren sind eine weitere nützliche Methode, um Arrays zu indizieren, besonders dann, wenn Sie mit Bedingungen arbeiten. Nehmen wir beispielsweise an, dass Sie ermitteln möchten, ob die Elemente einer Matrix A kleiner als die entsprechenden Elemente einer anderen Matrix B sind. Der Kleiner-als-Operator gibt ein logisches Array aus, dessen Elemente 1 sind, wenn ein Element in A kleiner als das entsprechende Element in B ist.

A = [1 2 6; 4 3 6]
A = 2×3

     1     2     6
     4     3     6

B = [0 3 7; 3 7 5]
B = 2×3

     0     3     7
     3     7     5

ind = A<B
ind = 2x3 logical array

   0   1   1
   0   1   0

Da Sie nun die Positionen der Elemente kennen, die die Bedingung erfüllen, können Sie die einzelnen Werte mithilfe von ind als Index-Array betrachten. MATLAB gleicht die Positionen von Wert 1 in ind mit den entsprechenden Elementen in A und B ab und führt die Werte in einem Spaltenvektor auf.

Avals = A(ind)
Avals = 3×1

     2
     3
     6

Bvals = B(ind)
Bvals = 3×1

     3
     7
     7

Die „Ist“-Funktionen von MATLAB geben ebenfalls logische Arrays aus, die angeben, welche Elemente der Eingabe eine bestimmte Bedingung erfüllen. Beispielsweise können Sie mit der Funktion ismissing prüfen, welche Elemente eines string-Vektors fehlen.

str = ["A" "B" missing "D" "E" missing];
ind = ismissing(str)
ind = 1x6 logical array

   0   0   1   0   0   1

Nehmen wir an, dass Sie die Werte der nicht fehlenden Elemente ermitteln möchten. Hierfür können Sie den Operator ~ und den Index-Vektor ind verwenden.

strvals = str(~ind)
strvals = 1x4 string
    "A"    "B"    "D"    "E"

Weitere Beispiele zur logischen Indizierung finden Sie unter Find Array Elements That Meet a Condition.

Verwandte Themen

Externe Websites