Tipps & Tricks

Indexieren von Elementen

Um in einem Array alle Elemente herauszufiltern, die einer bestimmten Bedingung genügen, gibt es unterschiedliche Möglichkeiten. Zunächst findet sich in der Hilfe der Befehl find. Dieser gibt den Index aller Elemente zurück, auf den eine Bedingung zutrifft. Um die Elemente selbst herauszufinden, kann man folgendermaßen vorgehen:
x = 0:9;                   % Erstellen eines Vektors mit 10 Elementen
idx = find(x > 4);         % Speichern aller Indexe, deren zugehörende Elemente > 4
x(idx)                     % Ausgeben der entsprechenden Elemente
Es gibt aber noch eine simplere Methode. Wird als Index ein Array derselben Größe, wie das zu indexierende Array selbst übergeben und besitzt das Index-Array nur Elemente mit den Werten 0 oder 1, werden beim Indexieren nur Elemente mit Index 1 ausgegeben. Somit lässt sich die obere Anweisung auch schreiben als:
x = 0:9;                   % Erstellen eines Vektors mit 10 Elementen
idx = x > 4;               % Erstellen eines Vektors mit 1 für alle Elemente > 4
x(idx)                     % Ausgeben der entsprechenden Elemente
Oder in Kurzform:
x = 0:9;                   % Erstellen eines Vektors mit 10 Elementen
x(x > 4)                   % Ausgeben aller Elemente > 4

Kopieren eines Vektors

Das n-fache Kopieren eines Vektors kann mit Tonys Trick erreicht werden:
x = (1:5)';                % Erstellen des zu kopierenden Vektors
x(:, ones(4, 1))           % 4-maliges Kopieren des Vektors
Allerdings muss hierbei beachtet werden, dass dabei ein zusätzlicher Index-Vektor erstellt werden muss. Deshalb ist für gewöhnlich folgende Lösung vorzuziehen.
repmat((1:5)', 1, 4);      % Erstellen des zu kopierenden Vektors

Erstellen einer 1000x1000 Matrix voller 5er

Dieses Beispiel erstellt zuerst eine Matrix bestehend aus 1000x1000 Einsen. Danach muss jedes einzelne Element mit 5 multipliziert werden.
x = ones(1000) * 5;
Die Matrix kann auch mit Hilfe von Tonys Trick erstellt werden. Dabei fällt die Multiplikation weg, aber es muss ein zusätzliches Index-Array erstellt werden.
x = 5;                     % Festlegen des zu kopierenden Werts
x = x(ones(1000));         % 1000x1000-maliges Kopieren des Werts
In diesem Beispiel wird die 5 1000x1000 mal kopiert. Diese Methode sollte den oberen bevorzugt werden.
x = repmat(5, 1000);
Eine weitere recht effiziente Lösung ist es, das Array vor der Zuweisung entsprechend zu allokieren.
x(1000, 1000) = 5;         % Erstellen eines 1000x1000 großen Arrays
x(:) = 5;                  % Initialisieren der Werte mit 5

Herumdrehen eines Vektors

x = 0:9;                   % Erstellen eines Vektors mit 10 Elementen
x(end:-1:1)                % Abfragen der Elemente in umgekehrter Reihenfolge
x = 0:9;                   % Erstellen eines Vektors mit 10 Elementen
fliplr(x)                  % Umdrehen der Elemente mittels fliplr
x = 0:9;                   % Erstellen eines Vektors mit 10 Elementen
rot90(rot90(x))            % Umdrehen der Elemente durch zweimaliges Drehen mit rot90