NumPy Tutorials

NumPy Arrays: Reshaping und Größenänderung meistern

Spread the love

Das effiziente Manipulieren von Array-Formen ist fundamental für die effektive Datenverarbeitung mit NumPy. Dieses Tutorial befasst sich mit zwei Kernfunktionen zum Reshapen und Resizen von NumPy-Arrays: reshape() und resize(). Wir werden ihre Funktionalitäten, subtile Unterschiede und Best Practices untersuchen, damit Sie sie in Ihren Data-Science-Projekten sicher einsetzen können.

Inhaltsverzeichnis

  1. numpy.reshape()
  2. ndarray.reshape()
  3. Überlegungen zum gemeinsamen Speicher
  4. numpy.resize()

1. numpy.reshape()

Die Funktion numpy.reshape() ist ein vielseitiges Werkzeug zum Ändern der Form eines NumPy-Arrays, ohne die zugrunde liegenden Daten zu verändern. Sie benötigt das Array und die gewünschte neue Form als Eingabe. Entscheidend ist, dass die neue Form mit der Größe des ursprünglichen Arrays kompatibel sein muss (die Gesamtzahl der Elemente muss unverändert bleiben).


import numpy as np

arr = np.arange(12)  # Erstellt ein Array [0, 1, 2, ..., 11]
print("Original array:n", arr)

reshaped_arr = np.reshape(arr, (3, 4))  # Reshape zu einer 3x4 Matrix
print("nReshaped array:n", reshaped_arr)

# Verwendung von -1 zur automatischen Dimensionsberechnung
auto_reshape = np.reshape(arr, (-1, 3)) 
print("nAuto-reshaped array:n", auto_reshape)

# Fehlerbehandlung für inkompatible Formen
try:
    invalid_reshape = np.reshape(arr, (2,7))
    print(invalid_reshape)
except ValueError as e:
    print(f"nError: {e}")

2. ndarray.reshape()

Die Methode ndarray.reshape() bietet einen alternativen Ansatz und arbeitet direkt auf einem bestehenden ndarray-Objekt. Ihre Funktionalität ist identisch mit numpy.reshape(); der einzige Unterschied liegt in der Methode des Aufrufs.


arr = np.arange(12)
reshaped_arr = arr.reshape((4, 3))  # Methodenaufruf
print("nReshaped array (Methodenaufruf):n", reshaped_arr)

3. Überlegungen zum gemeinsamen Speicher

Sowohl numpy.reshape() als auch ndarray.reshape() arbeiten im Allgemeinen direkt im vorhandenen Speicher (in-place). Das bedeutet, dass sie keine Kopie der Array-Daten erstellen; stattdessen ändern sie die Sicht auf die zugrunde liegenden Daten. Dies ist sehr speichereffizient. Änderungen am reshapten Array werden im Original und umgekehrt widergespiegelt. Dies erfordert jedoch auch eine sorgfältige Überlegung, insbesondere wenn Sie den Inhalt des ursprünglichen Arrays erhalten müssen. Um eine Kopie zu erstellen, verwenden Sie die Methode .copy():


arr = np.arange(12)
reshaped_arr = arr.reshape((3,4))
reshaped_arr[0,0] = 99 # Ändert auch das Original-Array!
print("nOriginal array nach Reshape-Modifikation:n", arr)

arr = np.arange(12)
reshaped_arr_copy = arr.reshape((3,4)).copy() #Erstellt eine Kopie
reshaped_arr_copy[0,0] = 100 # Ändert nur die Kopie
print("nOriginal array nach Kopie-Modifikation:n", arr)

4. numpy.resize()

Die Funktion numpy.resize() bietet die Möglichkeit, die Größe eines Arrays zu ändern, im Gegensatz zu reshape(), das die Gesamtzahl der Elemente beibehält. resize() kann die Anzahl der Elemente ändern. Wenn die neue Größe größer ist, wird das Array mit Nullen oder wiederholten Elementen gepolstert. Wenn sie kleiner ist, werden Elemente abgeschnitten. Wichtig ist, dass resize() *immer* ein neues Array zurückgibt; es ändert das Original nicht direkt (in-place).


arr = np.arange(5)
resized_arr = np.resize(arr, (8,))  # Größe auf Länge 8 ändern
print("nResized array (mit Nullen gepolstert):n", resized_arr)

resized_arr_2 = np.resize(arr,(2,)) #Größe auf Länge 2 ändern
print("nResized array (abgeschnitten):n", resized_arr_2)

resized_arr_3 = np.resize(arr, (2,3)) #Größe auf 2x3 ändern, wiederholt das Array
print("nResized array (wiederholt):n", resized_arr_3)

Dieses Tutorial bietet einen umfassenden Überblick über das Reshapen und Resizen von NumPy-Arrays. Die Beherrschung dieser Techniken ist entscheidend für die effiziente Datenmanipulation im wissenschaftlichen Rechnen und in der Data Science.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert