Logische Indizierung

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

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.

Hide 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

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 

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 

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 

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