Introduction
Ce défi vous initie à numpy.einsum, une fonction puissante et polyvalente pour les opérations sur les tenseurs. Au lieu d'appeler des fonctions spécifiques comme dot, trace ou multiply, einsum vous permet de définir ces opérations et bien plus encore à l'aide d'une notation simple basée sur des chaînes de caractères. En complétant ce défi, vous acquerrez une solide compréhension de la manière d'utiliser einsum pour des manipulations de tableaux courantes et complexes.
Tâche 1 : Multiplication Matricielle
La multiplication de matrices est une opération fondamentale en algèbre linéaire. Avec einsum, vous pouvez exprimer cette opération en définissant comment les indices des tableaux d'entrée doivent être combinés. Pour deux matrices $A$ (de forme $m \times n$) et $B$ (de forme $n \times p$), le produit $C$ (de forme $m \times p$) est défini. En notation einsum, cela s'écrit ij,jk->ik. L'indice répété j est sommé.
Votre Tâche
Complétez la fonction matmul dans le fichier matmul.py. Cette fonction doit utiliser numpy.einsum pour multiplier deux matrices, A et B, et retourner le résultat.
Fichier à modifier
/home/labex/project/matmul.py
Le fichier a été créé pour vous avec le contenu suivant :
import numpy as np
def matmul(A: np.ndarray, B: np.ndarray) -> np.ndarray:
## TODO: Perform matrix multiplication using Numpy's einsum function.
pass
Tâche 2 : Trace d'une Matrice
La trace d'une matrice carrée est la somme des éléments de sa diagonale principale. einsum offre un moyen très concis de spécifier cette sommation. Pour une matrice $A$, les éléments diagonaux sont ceux pour lesquels l'indice de ligne est égal à l'indice de colonne ($A_{ii}$). La chaîne einsum pour cette opération est ii->. L'indice répété i indique la sommation, et la sortie vide signifie que le résultat est un scalaire.
Votre Tâche
Complétez la fonction trace dans trace_of_matrix.py. Utilisez numpy.einsum pour calculer la trace d'une matrice carrée donnée A.
Fichier à modifier
/home/labex/project/trace_of_matrix.py
Le fichier a été créé pour vous avec le contenu suivant :
import numpy as np
def trace(A: np.ndarray) -> float:
## TODO: Compute the trace of a matrix using Numpy's einsum function.
pass
Tâche 3 : Produit Hadamard
Le produit de Hadamard, ou produit élément par élément, crée une nouvelle matrice où chaque élément est le produit des éléments correspondants de deux matrices d'entrée de même forme. Pour deux matrices $A$ et $B$ de forme $(m \times n)$, le produit de Hadamard $C$ est également de forme $(m \times n)$, où $C_{ij} = A_{ij} \times B_{ij}$. La chaîne einsum pour cela est ij,ij->ij.
Votre Tâche
Complétez la fonction hadamard_product dans hadamard_product.py. Cette fonction doit calculer le produit élément par élément de deux matrices, A et B, en utilisant numpy.einsum.
Fichier à modifier
/home/labex/project/hadamard_product.py
Le fichier a été créé pour vous avec le contenu suivant :
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
Tâche 4 : Contraction Tensorielle
einsum excelle véritablement lorsqu'il s'agit de tableaux de dimensions supérieures, ou tenseurs. La contraction tensorielle est une généralisation de la multiplication matricielle. Dans cette tâche, vous allez contracter un tenseur 3D $A$ de forme $(m \times n \times p)$ avec une matrice 2D $B$ de forme $(p \times q)$. L'objectif est de sommer sur la dimension partagée p, ce qui donne un nouveau tenseur de forme $(m \times n \times q)$. La chaîne einsum pour cette opération est ijk,kl->ijl.
Votre Tâche
Complétez la fonction tensor_contract dans tensor_contract.py. Utilisez numpy.einsum pour effectuer une contraction entre un tenseur 3D A et une matrice 2D B.
Fichier à modifier
/home/labex/project/tensor_contract.py
Le fichier a été créé pour vous avec le contenu suivant :
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
Résumé
Félicitations pour avoir terminé le Défi NumPy Einsum ! Vous avez utilisé avec succès einsum pour effectuer la multiplication matricielle, calculer la trace d'une matrice, calculer le produit de Hadamard et réaliser une contraction tensorielle. Cela démontre votre capacité à utiliser la notation de sommation d'Einstein pour écrire du code concis, efficace et lisible pour des opérations complexes sur les tableaux.



