5  Slicing

5.1 Normales Slicing mit Zahlenwerten

AUswahl der jeweiligen Achsen für NumPy Arrays von verschiedener Dimension, dargestellt durch gestapelte Blöcke
Abbildung 5.1: Ansprechen der einzelnen Achsen für den ein-, zwei- und dreidimensionallen Fall inkl. jeweiligem Beispiel

Möchte man jetzt Daten innerhalb eines Arrays auswählen so geschieht das in der Form:

  1. [a] wobei ein einzelner Wert an Position a ausgegeben wird
  2. [a:b] wobei alle Werte von Position a bis Position b-1 ausgegeben werden
  3. [a:b:c] wobei die Werte von Position a bis Position b-1 mit einer Schrittweite von c ausgegeben werden
liste = np.array([1, 2, 3, 4, 5, 6])
# Auswählen des ersten Elements
liste[0]
np.int64(1)
# Auswählen des letzen Elements
liste[-1]
np.int64(6)
# Auswählen einer Reihe von Elementen
liste[1:4]
array([2, 3, 4])

Für zwei-dimensionale Arrays wählt man getrennt durch ein Komma mit einer zweiten Zahl die zweite Dimension aus.

matrix = np.array([[1, 2, 3], [4, 5, 6]])
# Auswählen einer Elements
matrix[1,1]
np.int64(5)

Für drei-dimensionale Arrays wählt man getrennt durch ein Komma mit einer weiteren Zahl die dritte Dimension aus. Dabei wird dieses jedoch an die erste Stelle gesetzt.

matrix_3d = np.array([[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]]])
print(matrix_3d)
[[[ 1  2  3]
  [ 4  5  6]]

 [[ 7  8  9]
  [10 11 12]]]
# Auswählen eines Elements
matrix_3d[1,0,2]
np.int64(9)

5.2 Slicing mit logischen Werten (Boolesche Masken)

Beim logischen Slicing wird eine boolesche Maske verwendet, um bestimmte Elemente eines Arrays auszuwählen. Die Maske ist ein Array gleicher Länge wie das Original, das aus True oder False Werten besteht.

# Erstellen wir ein Beispiel Array
a = np.array([1, 2, 3, 4, 5, 6])

# Erstellen der Maske
maske = a > 3

print(maske)
[False False False  True  True  True]

Wir erhalten also ein Array mit boolschen Werten. Verwenden wir diese Maske nun zum slicen, erhalten wir alle Werte an den Stellen, an denen die Maske den Wert True besitzt.

# Anwenden der Maske
print(a[maske])
[4 5 6]
Warnung

Das Verwenden von booleschen Arrays ist nur im numpy-Modul möglich. Es ist nicht Möglich dieses Vorgehen auf native Python Listen anzuwenden. Hier muss durch die Liste iterriert werden.

a = [1, 2, 3, 4, 5, 6]
ergebniss = [x for x in a if x > 3]
print(ergebniss) 
[4, 5, 6]

Wählen Sie die farblich markierten Bereiche aus dem Array “matrix” mit den eben gelernten Möglichkeiten des Array-Slicing aus.

matrix = np.array([
    [2, 11, 18, 47, 33, 48, 9, 31, 8, 41],
    [55, 1, 8, 3, 91, 56, 17, 54, 23, 12],
    [19, 99, 56, 72, 6, 13, 34, 16, 77, 56],
    [37, 75, 67, 5, 46, 98, 57, 19, 14, 7],
    [4, 57, 32, 78, 56, 12, 43, 61, 3, 88],
    [96, 16, 92, 18, 50, 90, 35, 15, 36, 97],
    [75, 4, 38, 53, 1, 79, 56, 73, 45, 56],
    [15, 76, 11, 93, 87, 8, 2, 58, 86, 94],
    [51, 14, 60, 57, 74, 42, 59, 71, 88, 52],
    [49, 6, 43, 39, 17, 18, 95, 6, 44, 75]
])
  • Rot: matrix[1,3]
  • Grün: matrix[4:6,2:6]
  • Pink: matrix[:,7]
  • Orange: matrix[7,:5]
  • Blau: matrix[-1,-1]