Logische Indizierung#
In Python können Sie zwei Werte miteinander vergleichen. Dazu stehen Ihnen die folgenden relationalen Operatoren zur Verfügung:
\(\texttt{>}\) (echt größer),
\(\texttt{<}\) (echt kleiner),
\(\texttt{>=}\) (größer gleich),
\(\texttt{<=}\) (kleiner gleich),
\(\texttt{==}\) (gleich),
\(\texttt{!=}\) (ungleich).
Das Ergebnis eines Vergleichs ist entweder \(\texttt{True}\) oder \(\texttt{False}\). \(\texttt{True}\) bedeutet dabei, dass die Vergleichsbedingung erfüllt ist, während \(\texttt{False}\) bedeutet, dass sie nicht erfüllt ist.
Aufgabe 1.1
Testen Sie, ob \(\pi\) kleiner als \(4\) ist, indem Sie den relationalen Operator \(\texttt{<}\) verwenden. Weisen Sie die Ausgabe einer Variablen mit dem Namen \(\texttt{x}\) zu. Die Konstante \(\pi\) ist in Python durch \(\texttt{np.pi}\) gegeben.
# Ihr Code
Hinweis
Verwenden Sie den Operator \(\texttt{<}\) mit zwei Skalaren. Beispiel: \(\texttt{a} = 5 < 10\).
Lösung
x = np.pi < 4
Sie können ein Array mit einem einzelnen skalaren Wert vergleichen, indem Sie relationale Operatoren verwenden. Das Ergebnis ist ein logisches Array, das dieselbe Größe hat wie das ursprüngliche Array.
x = np.array([3, 9, 12, 15, 7, 18, 20, 0])
print(x > 12)
Der folgende versteckte Code, der automatisch ausgeführt wird wenn Sie den Live-Code-Modus starten, erzeugt die Vektoren
\( \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \texttt{v} = \begin{pmatrix} -4 \\ 9 \\ 4 \\ 0 \\ -3 \\ -4 \\ 8 \end{pmatrix} \quad \text{und} \quad \texttt{w} = \begin{pmatrix} 22 \\ 10 \\ 10 \\ 23 \\ 20 \\ 3 \\ 7 \end{pmatrix}. \)
Die kommenden Aufgaben basieren auf diesen Vektoren und trainieren den Umgang mit relationalen Operatoren.
Show code cell content
import numpy as np
np.random.seed(42)
v = np.random.randint(-10, 10, size=7)
w = np.random.randint(0, 30, size=7)
Aufgabe 1.2
Prüfen Sie, ob das Array \(\texttt{v} = \begin{pmatrix} -4 & 9 & 4 & 0 & -3 & -4 & 8 \end{pmatrix}^T\) Elemente kleiner oder gleich als \(5\) enthält. Weisen Sie die Ausgabe einer Variablen mit dem Namen \(\texttt{v_le_5}\) zu.
# Ihr Code
Lösung
v_le_5 = (v <= 5)
Sie können ein logisches Array als Arrayindex verwenden, sodass Python die Arrayelemente eines Arrays \(\texttt{x}\) extrahiert, für die der entsprechende Index \(\texttt{True}\) ist. In diesem Beispiel werden alle Elemente von \(\texttt{x}\) extrahiert, die größer als \(6\) sind.
y = x[x > 6]
print(y)
Aufgabe 1.3
Erstellen Sie eine Variable \(\texttt{v_kl_4}\), die alle Elemente von \(\texttt{v} = \begin{pmatrix} -4 & 9 & 4 & 0 & -3 & -4 & 8 \end{pmatrix}^T\) enthält, die kleiner als \(4\) sind
# Ihr Code
Lösung
v_kl_4 = v[v < 4]
Sie können die logische Indizierung auch mit zwei verschiedenen Arrays verwenden.
sample = np.array([-2, 1, 2, -3, -5, -2, -4, 2])
y = sample[x > 6]
print(y)
Aufgabe 1.4
Erstellen Sie eine Variable \(\texttt{z}\), die die Elemente von \(\texttt{w} = \begin{pmatrix} 22 & 10 & 10 & 23 & 20 & 3 & 7 \end{pmatrix}^T\) enthält, die den Positionen entsprechen, an denen \(\texttt{v} = \begin{pmatrix} -4 & 9 & 4 & 0 & -3 & -4 & 8 \end{pmatrix}^T\) kleiner als \(4\) ist.
# Ihr Code
Lösung
z = w[v < 4]
Sie können die logische Indizierung verwenden, um Werte in einem Array neu zuzuweisen. Um beispielsweise im Array \(\texttt{x}\) alle Werte gleich \(999\) durch den Wert \(1\) zu ersetzen, verwenden Sie diese Syntax: \(\texttt{x[x == 999] = 1}\).
Aufgabe 1.5
Ändern Sie \(\texttt{v} = \begin{pmatrix} -4 & 9 & 4 & 0 & -3 & -4 & 8 \end{pmatrix}^T\) so, dass alle Werte kleiner als \(4\) durch den Wert \(0\) ersetzt werden.
# Ihr Code
Lösung
v[v < 4] = 0
Wie in der Mathematik können Sie logische Vergleiche mit UND (\(\texttt{&}\)) und ODER (\(\texttt{|}\)) kombinieren. Zum Suchen nach Werten größer als \(3\) und kleiner als \(13\) verwenden Sie \(\texttt{&}\).
y = x[(x > 3) & (x < 13)]
print(y)
Zum Suchen nach Werten größer als \(3\) oder kleiner als \(13\) verwenden Sie \(\texttt{|}\).
y = x[(x > 3) | (x < 13)]
print(y)
Zusatzaufgabe
Extrahieren Sie, die Werte in \(\texttt{w} = \begin{pmatrix} 22 & 10 & 10 & 23 & 20 & 3 & 7 \end{pmatrix}^T\), die im Intervall \([5, 15]\) liegen.
# Ihr Code