Matlab: Elementweise vergleichen, woher kommt der Befehl a(a>x)=y?
Guten Tag,
ich wollte eine Matrix (a) Elementweise mit einen Skalar (x) vergleichen. Wenn die Bedingung erfüllt ist, wird (a) an diesen Element der Wert (y) zugewiesen. Dazu habe ich diesen Befehl gefunden:
a(a>x)=y
Der Befehl tut was er soll und ich bin zufrieden damit. Leider verstehe ich nicht genau, woher dieser Befehl kommt. Die einzelnen Elemente verstehe ich schon, aber das Zusammenspiel durchblicke ich beim Ausdruck a(a<x) nicht.
Kann mir jemand den Ausdruck erklären oder mich auf Infomaterial dazu verlinken?
1 Antwort
Das ganze setzt sich aus 2 Teilen zusammen:
Erstens: Der Ausdruck "a > x" erzeugt eine Matrix vom Typ logical mit der selben Größe wie a. Diese Matrix hat eine logische 1 (true) an allen Positionen, an denen die Bedingung erfüllt ist, und eine logische 0, wenn die Bedingung nicht erfüllt ist.
Zweitens: Jeder Vektor und jede Matrix kann auf verschiedene Wege adressiert werden. Der Standardweg ist über die Adresse eines Elements. Also ganz klassisch a(2, 3) = 5; Man kann aber auch eine logische Matrix als Adressierung wählen. Diese muss dann genau so groß sein, wie die Matrix, auf die du zugreifen willst.
Beispiel:
a = rand(5); % 5x5 Zufallsmatrix
idxMatrix = logical( eye(5) ); % Einheitsmatrix als logical Datentyp
a(idxMatrix) = 0; % weißt jedem Wert von a, an dem idxMatrix == 1, den entsprechenden Wert zu
Vielen Dank, jetzt habe ich es verstanden. Wirklich gut erklärt.