In MATLAB bezieht sich der Befehl A(i,j)
auf das Element der
Matrix . Diese Bezeichnung ist praktisch in allen Programmiersprachen
üblich. MATLAB bietet jedoch einen viel weitergehenden Aspekt der
Indizierung, der es auf einfache Weise erlaubt auf bestimmte Regionen
innerhalb einer Matrix zuzugreifen. Diese Eigenschaft macht die Matrix
Manipulation einfacher als in vielen anderen Programmiersprachen. Außerdem
bietet es eine einfache Möglichkeit die ``vektorisierte'' Natur von
Berechnungen in MATLAB zu benutzen.
Die meisten Programme werden dadurch viel lesbarer und übersichtlicher, da man sich eine große Anzahl von Schleifen (und damit auch eine große Anzahl von Fehlerquellen) sparen kann.
In der Folge wird nun auf die verschiedenen Möglichkeiten der Indizierung eingegangen. In Tabelle 3.5 werden die einzelnen Regeln erläutert, und in 3.6 die Zuweisung von Werten gezeigt, und in 3.7 der Zugriff auf bestimmte Regionen gezeigt.
Index | Alternative | Zeilen | Spalten | Resultat |
INDIZIERUNG MIT ZWEI INDICES | ||||
X(J,M) |
J |
M |
Skalar | |
X(J,:) |
X(J,1:end) |
J |
ALLE |
Zeilenvektor |
X(:,M) |
X(1:end,M) |
ALLE |
M |
Spaltenvektor |
X(:,:) |
X(1:end,1:end) |
ALLE |
ALLE |
2-D Array |
X(J:K,M) |
J:K |
M |
Spaltenvektor | |
X(J:D:K,M) |
J:D:K |
M |
Spaltenvektor | |
X(J:K,M:N) |
J:K |
M:N |
2-D Array | |
INDIZIERUNG MIT EINEM INDEX (LINEAR) | ||||
X(:) |
ALLE |
ALLE |
Spaltenvektor | |
X(I) |
JI |
MI |
Skalar | |
X(I:H) |
JI:JH |
MI:MH |
Zeilenvektor |
Die Umrechnung zwischen dem linearen Index und mehrfachen Indices erfolgt mit den Befehlen ind2sub und sub2ind:
[JI,MI] = ind2sub(size(X),I)
[I] = sub2ind(size(X),JI,MI)
Da mit Hilfe der Doppelpunkt Notation ja eigentlich Vektoren als Indices erzeugt werden (3.4.2), ist natürlich auch folgende Schreibweise erlaubt:
X([1 2],[2 3])
äquivalent zu X(1:2,2:3)
X([1 3],[2 4])
äquivalent zu X(1:2:3,2:2:4)
Eine wichtige Rolle spielt auch das Keyword end, das im richtigen Kontext die entsprechende Größe angibt. Damit ist es nicht notwendig bei der Indizierung die Größe der Arrays zu kennen:
X(1:2:end,3)
für die dritte Spalte jeder 2.ten Zeile.
X(2:end-1,2:end-1)
für die 2.te bis vorletzte Zeile bzw. Spalte.
In Ergänzung zur normalen Indizierung erlaubt MATLAB auch die sogenannte logische Indizierung mit Arrays die nur die Werte 1 (entspricht TRUE) bzw. 0 (entspricht FALSE) enthalten. Dadurch ist auch der Zugriff auf völlig ungeordnete Bereiche möglich (Tab.3.8).
Wichtig dabei ist Folgendes:
L
muss die gleiche Größe wie das Array X
haben.
L
muss ein logisches Array sein, das entstanden ist durch
Die vorliegenden Beispiele demonstrieren die Indizierung in MATLAB an Hand von 2-dimensionalen Matrizen. Jedes Element enthält dabei in der unteren linken Ecke den 2-D Index und in der rechten unteren Ecke den linearen Index. Erfolgt eine Zuweisung, bleibt die Form der Matrix erhalten, erfolgt jedoch keine Zuweisung werden die entsprechenden Elemente ausgeblendet. Ändert sich dabei die Form in einen Zeilen- oder Spaltenvektor, wird in der linken unteren Ecke Z oder S ausgegeben. Der lineare Index in der rechten unteren Ecke gibt dabei die Position im Vektor an und die Form der Darstellung hat keine Bedeutung mehr.
Winfried Kernbichler 2005-04-26