Fonction Einsum de NumPy

NumPyBeginner
Pratiquer maintenant

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.

Ceci est un Défi (Challenge), qui diffère d'un Laboratoire Guidé (Guided Lab). Vous devez accomplir les tâches de manière indépendante. Si vous rencontrez des difficultés, n'hésitez pas à demander des indices à Labby ou à consulter la solution fournie.

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
✨ Vérifier la solution et pratiquer

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
✨ Vérifier la solution et pratiquer

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
✨ Vérifier la solution et pratiquer

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
✨ Vérifier la solution et pratiquer

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.