NumPy reshape()-Funktion

NumPyNumPyBeginner
Jetzt üben

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

Die Funktion reshape() in der NumPy-Bibliothek ermöglicht es Ihnen, die Form eines Arrays zu ändern, ohne seine Daten zu verändern. Diese leistungsstarke Funktion hilft Ihnen, die Array-Elemente je nach Ihren spezifischen Anforderungen in verschiedene Dimensionen neu zu organisieren. Egal, ob Sie ein eindimensionales Array in eine Matrix umwandeln oder ein mehrdimensionales Array für die Datenverarbeitung erstellen müssen, die Funktion reshape() bietet eine flexible Lösung.

In diesem Lab werden wir die praktischen Anwendungen der Funktion reshape() untersuchen, ihre Syntax verstehen und lernen, wie wir sie effektiv mit verschiedenen Parametern verwenden können.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL numpy(("NumPy")) -.-> numpy/ArrayBasicsGroup(["Array Basics"]) numpy(("NumPy")) -.-> numpy/ArrayManipulationGroup(["Array Manipulation"]) numpy/ArrayBasicsGroup -.-> numpy/1d_array("1D Array Creation") numpy/ArrayBasicsGroup -.-> numpy/multi_array("Multi-dimensional Array Creation") numpy/ArrayBasicsGroup -.-> numpy/shape_dim("Shapes and Dimensions") numpy/ArrayManipulationGroup -.-> numpy/reshape("Reshape") subgraph Lab Skills numpy/1d_array -.-> lab-86496{{"NumPy reshape()-Funktion"}} numpy/multi_array -.-> lab-86496{{"NumPy reshape()-Funktion"}} numpy/shape_dim -.-> lab-86496{{"NumPy reshape()-Funktion"}} numpy/reshape -.-> lab-86496{{"NumPy reshape()-Funktion"}} end

Erste Schritte mit NumPy und das Erstellen von Arrays

Bevor wir Arrays umformen können, müssen wir verstehen, was NumPy-Arrays sind und wie man sie erstellt. NumPy (Numerical Python) ist eine leistungsstarke Bibliothek, die Unterstützung für große, mehrdimensionale Arrays und Matrizen bietet, zusammen mit einer Sammlung mathematischer Funktionen, um auf diesen Arrays zu operieren.

Beginnen wir damit, eine neue Python-Datei in der WebIDE zu erstellen. Klicken Sie auf das "Explorer"-Symbol in der linken Seitenleiste und dann auf die Schaltfläche "Neue Datei". Benennen Sie Ihre Datei numpy_reshape.py.

Neue Datei

Jetzt importieren wir die NumPy-Bibliothek und erstellen ein einfaches Array:

import numpy as np

## Create a simple 1D array using np.arange() which generates a sequence of numbers
original_array = np.arange(12)
print("Original 1D array:")
print(original_array)
print("Shape of the original array:", original_array.shape)
print("Dimensions of the original array:", original_array.ndim)

Öffnen Sie das Terminal in der WebIDE und führen Sie Ihr Skript aus:

python3 numpy_reshape.py

Sie sollten eine Ausgabe ähnlich der folgenden sehen:

Original 1D array:
[ 0  1  2  3  4  5  6  7  8  9 10 11]
Shape of the original array: (12,)
Dimensions of the original array: 1

Lassen Sie uns verstehen, was hier passiert:

  • np.arange(12) erstellt ein eindimensionales Array mit Werten von 0 bis 11.
  • array.shape gibt uns die Dimensionen des Arrays an (12 Elemente in einer einzigen Dimension).
  • array.ndim gibt uns die Anzahl der Dimensionen an (in diesem Fall 1).

Grundlegende Umformung - Umwandlung von eindimensionalen Arrays in zweidimensionale

Nachdem wir die Grundlagen von NumPy-Arrays verstanden haben, lassen Sie uns die Funktion reshape() untersuchen. Diese Funktion ermöglicht es uns, die Form eines Arrays zu ändern, ohne seine Daten zu verändern.

Öffnen Sie Ihre Datei numpy_reshape.py und fügen Sie den folgenden Code hinzu:

import numpy as np

## Create a simple 1D array
original_array = np.arange(12)
print("Original 1D array:")
print(original_array)
print("Shape of the original array:", original_array.shape)
print("Dimensions of the original array:", original_array.ndim)
print("-" * 50)  ## Separator line

## Reshape the array to a 2D array with 3 rows and 4 columns
reshaped_3x4 = np.reshape(original_array, (3, 4))
print("Reshaped array (3x4):")
print(reshaped_3x4)
print("Shape of the reshaped array:", reshaped_3x4.shape)
print("Dimensions of the reshaped array:", reshaped_3x4.ndim)
print("-" * 50)  ## Separator line

## Reshape the array to a 2D array with 4 rows and 3 columns
reshaped_4x3 = np.reshape(original_array, (4, 3))
print("Reshaped array (4x3):")
print(reshaped_4x3)
print("Shape of the reshaped array:", reshaped_4x3.shape)
print("Dimensions of the reshaped array:", reshaped_4x3.ndim)

Führen Sie Ihr Skript im Terminal aus:

python3 numpy_reshape.py

Sie sollten eine Ausgabe sehen, die zeigt, wie das ursprüngliche Array in verschiedene zweidimensionale Strukturen umgeformt wurde.

Lassen Sie uns verstehen, was hier passiert:

  1. Wir haben zunächst ein eindimensionales Array mit 12 Elementen erstellt.
  2. Wir haben es in eine 3×4-Matrix (3 Zeilen, 4 Spalten) umgeformt.
  3. Wir haben es dann in eine 4×3-Matrix (4 Zeilen, 3 Spalten) umgeformt.

In beiden Fällen bleibt die Gesamtzahl der Elemente gleich (12), aber die Organisation ändert sich. Die Funktion reshape() erfordert, dass die neue Form mit der Größe des ursprünglichen Arrays kompatibel ist. Dies bedeutet, dass das Produkt der Dimensionen in der neuen Form der Gesamtzahl der Elemente im ursprünglichen Array entsprechen muss.

Fortgeschrittene Umformung - Erstellen von dreidimensionalen Arrays

Jetzt gehen wir zu einer fortgeschritteneren Umformung über, indem wir dreidimensionale Arrays erstellen. Dreidimensionale Arrays sind im Wesentlichen Arrays von zweidimensionalen Arrays und eignen sich gut für die Darstellung von Volumen, Zeitreihen von Bildern oder anderen komplexen Datenstrukturen.

Fügen Sie den folgenden Code in Ihre Datei numpy_reshape.py ein:

import numpy as np

## Create a simple 1D array
original_array = np.arange(24)
print("Original 1D array:")
print(original_array)
print("Shape of the original array:", original_array.shape)
print("-" * 50)  ## Separator line

## Reshape into a 3D array with dimensions 2x3x4
## This creates 2 blocks, each with 3 rows and 4 columns
reshaped_3d = np.reshape(original_array, (2, 3, 4))
print("Reshaped 3D array (2x3x4):")
print(reshaped_3d)
print("Shape of the 3D array:", reshaped_3d.shape)
print("Dimensions of the 3D array:", reshaped_3d.ndim)
print("-" * 50)  ## Separator line

## Accessing elements in a 3D array
print("First block of the 3D array:")
print(reshaped_3d[0])
print("\nSecond block of the 3D array:")
print(reshaped_3d[1])
print("\nElement at position [1,2,3] (second block, third row, fourth column):")
print(reshaped_3d[1, 2, 3])

Führen Sie Ihr Skript erneut aus:

python3 numpy_reshape.py

Die Ausgabe zeigt, wie ein eindimensionales Array mit 24 Elementen in eine dreidimensionale Struktur umgewandelt werden kann. Diese Struktur kann als 2 Blöcke visualisiert werden, wobei jeder Block eine 3×4-Matrix enthält.

Verständnis von dreidimensionalen Arrays:

  • Die erste Dimension (2) repräsentiert die Anzahl der "Blöcke" oder "Schichten".
  • Die zweite Dimension (3) repräsentiert die Anzahl der Zeilen in jedem Block.
  • Die dritte Dimension (4) repräsentiert die Anzahl der Spalten in jeder Zeile.

Diese Struktur ist besonders nützlich für die Bildverarbeitung (wobei jeder "Block" ein Farbkanal sein könnte), Zeitreihendaten (wobei jeder "Block" ein Zeitpunkt sein könnte) oder andere Szenarien, die mehrere Matrizen erfordern.

Verständnis der Ordnungsparameter bei der Umformung

Beim Umformen von Arrays bietet NumPy einen zusätzlichen Parameter namens order, der steuert, wie Elemente aus dem ursprünglichen Array gelesen und in das umgeformte Array eingefügt werden. Es gibt zwei Hauptordnungsvereinbarungen:

  1. C-ähnliche Ordnung (Zeilenweise): Die Standardoption in NumPy, bei der der Index der letzten Achse am schnellsten ändert.
  2. Fortran-ähnliche Ordnung (Spaltenweise): Bei der der Index der ersten Achse am schnellsten ändert.

Lassen Sie uns beide Ordnungsmethoden untersuchen, indem wir diesen Code in Ihre Datei numpy_reshape.py einfügen:

import numpy as np

## Create a 1D array
original_array = np.arange(12)
print("Original 1D array:")
print(original_array)
print("-" * 50)  ## Separator line

## Reshape using C-style ordering (default)
c_style = np.reshape(original_array, (3, 4), order='C')
print("Reshaped array with C-style ordering (row-major):")
print(c_style)
print("-" * 50)  ## Separator line

## Reshape using Fortran-style ordering
f_style = np.reshape(original_array, (3, 4), order='F')
print("Reshaped array with Fortran-style ordering (column-major):")
print(f_style)
print("-" * 50)  ## Separator line

## Alternative syntax using the array's reshape method
array_method = original_array.reshape(3, 4)
print("Using the array's reshape method:")
print(array_method)
print("-" * 50)  ## Separator line

## Using -1 as a dimension (automatic calculation)
auto_dim = original_array.reshape(3, -1)  ## NumPy will figure out that -1 should be 4
print("Using automatic dimension calculation with -1:")
print(auto_dim)
print("Shape:", auto_dim.shape)

Führen Sie Ihr Skript aus, um die Unterschiede zu sehen:

python3 numpy_reshape.py

Wichtige Punkte zum Verständnis:

  1. C-ähnliche Ordnung (Zeilenweise): Elemente werden zeilenweise platziert. Dies ist die Standardoption in NumPy.
  2. Fortran-ähnliche Ordnung (Spaltenweise): Elemente werden spaltenweise platziert.
  3. Syntax der Array-Methode: Anstelle von np.reshape(array, shape) können Sie array.reshape(shape) verwenden.
  4. Automatische Dimensionsberechnung: Wenn Sie -1 für eine der Dimensionen verwenden, teilen Sie NumPy damit mit, diese Dimension automatisch basierend auf der Größe des Arrays zu berechnen.

Der order-Parameter ist besonders wichtig, wenn:

  • Sie mit sehr großen Arrays arbeiten und die Speicherlayout für die Leistung wichtig ist.
  • Sie mit anderen Bibliotheken oder Sprachen interagieren, die eine andere Standardordnung verwenden.
  • Sie die Kompatibilität mit bestimmten Algorithmen sicherstellen müssen.

Zusammenfassung

In diesem Lab haben wir die vielseitige reshape()-Funktion in NumPy untersucht, die es uns ermöglicht, Array-Daten in verschiedene Dimensionen zu reorganisieren, ohne die zugrunde liegenden Daten zu ändern. Hier ist, was wir gelernt haben:

  1. Grundlegende Umformung: Wie man eindimensionale Arrays in zweidimensionale Matrizen mit verschiedenen Zeilen- und Spaltenkonfigurationen umwandelt.

  2. Fortgeschrittene Umformung: Das Erstellen von dreidimensionalen Arrays für komplexere Datenstrukturen, die sich gut zur Darstellung von Volumen, Zeitreihen von Bildern oder anderen mehrdimensionalen Daten eignen.

  3. Ordnungsparameter: Das Verständnis des Unterschieds zwischen C-ähnlicher (zeilenweiser) und Fortran-ähnlicher (spaltenweiser) Ordnung und wie diese die Anordnung der Elemente im umgeformten Array beeinflussen.

  4. Alternative Syntax: Die Verwendung sowohl der np.reshape()-Funktion als auch der .reshape()-Methode des Arrays, um die gleichen Ergebnisse zu erzielen.

  5. Automatische Dimensionsberechnung: Die Verwendung von -1 als Platzhalter, um NumPy die automatische Berechnung der geeigneten Dimension zu ermöglichen.

Die reshape()-Funktion ist ein grundlegendes Werkzeug bei der Datenmanipulation mit NumPy und ermöglicht die effiziente Reorganisation von Daten für verschiedene Anwendungen in der Datenwissenschaft, Maschinellen Lernens und wissenschaftlichen Berechnung. Das Verständnis, wie man Daten richtig umformt, ist für die Vorbereitung von Eingaben für Modelle, die Visualisierung von mehrdimensionalen Daten und die Durchführung komplexer mathematischer Operationen auf Arrays unerlässlich.