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.
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
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
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
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
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.



