NumPy Einsum Funktion

NumPyBeginner
Jetzt üben

Einführung

Diese Herausforderung führt Sie in numpy.einsum ein, eine leistungsstarke und vielseitige Funktion für Tensoroperationen. Anstatt spezifische Funktionen wie dot, trace oder multiply aufzurufen, ermöglicht einsum die Definition dieser und weiterer Operationen mithilfe einer einfachen, zeichenkettenbasierten Notation. Durch die Bewältigung dieser Herausforderung werden Sie ein fundiertes Verständnis dafür entwickeln, wie einsum für gängige und komplexe Array-Manipulationen eingesetzt wird.

Dies ist eine Herausforderung (Challenge), die sich von einem geführten Labor (Guided Lab) unterscheidet. Sie müssen die Aufgaben eigenständig erledigen. Wenn Sie auf Schwierigkeiten stoßen, können Sie Labby gerne um Hinweise bitten oder die bereitgestellte Lösung überprüfen.

Aufgabe 1: Matrixmultiplikation

Die Matrixmultiplikation ist eine grundlegende Operation in der linearen Algebra. Mit einsum können Sie diese Operation ausdrücken, indem Sie definieren, wie die Indizes der Eingabearrays kombiniert werden sollen. Für zwei Matrizen A (Form m \times n) und B (Form n \times p) ist das Produkt C (Form m \times p) definiert. In der einsum-Notation lautet dies ij,jk->ik. Der wiederholte Index j wird summiert.

Ihre Aufgabe

Vervollständigen Sie die Funktion matmul in der Datei matmul.py. Diese Funktion soll numpy.einsum verwenden, um zwei Matrizen, A und B, zu multiplizieren und das Ergebnis zurückzugeben.

Zu bearbeitende Datei

  • /home/labex/project/matmul.py

Die Datei wurde für Sie mit folgendem Inhalt erstellt:

import numpy as np

def matmul(A: np.ndarray, B: np.ndarray) -> np.ndarray:
    ## TODO: Perform matrix multiplication using Numpy's einsum function.
    pass
✨ Lösung prüfen und üben

Aufgabe 2: Spur einer Matrix

Die Spur einer quadratischen Matrix ist die Summe der Elemente auf ihrer Hauptdiagonale. einsum bietet eine sehr prägnante Möglichkeit, diese Summation anzugeben. Für eine Matrix A sind die Diagonalelemente diejenigen, bei denen der Zeilenindex gleich dem Spaltenindex ist (A_{ii}). Die einsum-Zeichenkette für diese Operation lautet ii->. Der wiederholte Index i kennzeichnet die Summation, und die leere Ausgabe bedeutet, dass das Ergebnis ein Skalar ist.

Ihre Aufgabe

Vervollständigen Sie die Funktion trace in trace_of_matrix.py. Verwenden Sie numpy.einsum, um die Spur einer gegebenen quadratischen Matrix A zu berechnen.

Zu bearbeitende Datei

  • /home/labex/project/trace_of_matrix.py

Die Datei wurde für Sie mit folgendem Inhalt erstellt:

import numpy as np

def trace(A: np.ndarray) -> float:
    ## TODO: Compute the trace of a matrix using Numpy's einsum function.
    pass
✨ Lösung prüfen und üben

Aufgabe 3: Hadamard-Produkt

Das Hadamard-Produkt, auch elementweises Produkt genannt, erzeugt eine neue Matrix, bei der jedes Element das Produkt der entsprechenden Elemente zweier Eingabematrizen gleicher Form ist. Für zwei Matrizen A und B der Form (m \times n) ist das Hadamard-Produkt C ebenfalls von der Form (m \times n), wobei C_{ij} = A_{ij} \times B_{ij}. Die einsum-Zeichenkette hierfür lautet ij,ij->ij.

Ihre Aufgabe

Vervollständigen Sie die Funktion hadamard_product in hadamard_product.py. Diese Funktion soll das elementweise Produkt zweier Matrizen, A und B, unter Verwendung von numpy.einsum berechnen.

Zu bearbeitende Datei

  • /home/labex/project/hadamard_product.py

Die Datei wurde für Sie mit folgendem Inhalt erstellt:

import numpy as np

def hadamard_product(A: np.ndarray, B: np.ndarray) -> np.ndarray:
    ## TODO: Compute the Hadamard product of two matrices using Numpy's einsum function.
    pass
✨ Lösung prüfen und üben

Aufgabe 4: Tensor-Kontraktion

einsum glänzt wirklich im Umgang mit höherdimensionalen Arrays oder Tensoren. Tensor-Kontraktion ist eine Verallgemeinerung der Matrixmultiplikation. In dieser Aufgabe werden Sie einen 3D-Tensor A der Form (m \times n \times p) mit einer 2D-Matrix B der Form (p \times q) kontrahieren. Das Ziel ist es, über die gemeinsame Dimension p zu summieren, was zu einem neuen Tensor der Form (m \times n \times q) führt. Die einsum-Zeichenkette für diese Operation lautet ijk,kl->ijl.

Ihre Aufgabe

Vervollständigen Sie die Funktion tensor_contract in tensor_contract.py. Verwenden Sie numpy.einsum, um eine Kontraktion zwischen einem 3D-Tensor A und einer 2D-Matrix B durchzuführen.

Zu bearbeitende Datei

  • /home/labex/project/tensor_contract.py

Die Datei wurde für Sie mit folgendem Inhalt erstellt:

import numpy as np

def tensor_contract(A: np.ndarray, B: np.ndarray) -> np.ndarray:
    ## TODO: Perform tensor contraction between two tensors using Numpy's einsum function.
    pass
✨ Lösung prüfen und üben

Zusammenfassung

Herzlichen Glückwunsch zum Abschluss der NumPy Einsum Challenge! Sie haben erfolgreich einsum verwendet, um Matrixmultiplikation durchzuführen, eine Matrixspur zu berechnen, das Hadamard-Produkt zu ermitteln und eine Tensor-Kontraktion durchzuführen. Dies zeigt Ihre Fähigkeit, die Einstein-Summationsnotation zu nutzen, um prägnanten, effizienten und lesbaren Code für komplexe Array-Operationen zu schreiben.