Diffusion
Glissez pour afficher le menu
Avant d'aborder les opérations mathématiques dans NumPy, il est important de comprendre un concept clé : le broadcasting.
Le broadcasting est une méthode permettant d'aligner les formes des tableaux pour effectuer des opérations arithmétiques sans avoir à les remodeler manuellement. En résumé, le broadcasting ajuste automatiquement les formes des tableaux.
Lorsque NumPy travaille avec deux tableaux, il vérifie leurs formes pour s'assurer de leur compatibilité afin de déterminer s'ils peuvent être broadcastés ensemble.
Si deux tableaux ont déjà la même forme, la diffusion n'est pas nécessaire.
Même nombre de dimensions
Supposons que vous ayez deux tableaux pour lesquels vous souhaitez effectuer une addition, avec les formes suivantes : (2, 3) et (1, 3). NumPy compare les formes des deux tableaux en commençant par la dimension la plus à droite et en se déplaçant vers la gauche. Autrement dit, il compare d'abord 3 et 3, puis 2 et 1.
Deux dimensions sont considérées comme compatibles si elles sont égales ou si l'une d'elles est 1 :
- Pour les dimensions 3 et 3, elles sont compatibles car elles sont égales ;
- Pour les dimensions 2 et 1, elles sont compatibles car l'une d'elles est 1.
Puisque toutes les dimensions sont compatibles, les formes sont considérées comme compatibles. Par conséquent, les tableaux peuvent être diffusés, ce qui aboutit à une opération d'addition standard entre matrices de même forme, réalisée élément par élément.
123456789import numpy as np array_1 = np.array([[1, 2, 3], [4, 5, 6]]) print(array_1.shape) # Creating a 2D array with 1 row array_2 = np.array([[11, 12, 13]]) print(array_2.shape) # Broadcasting and element-wise addition result = array_1 + array_2 print(result)
array_2 est créé comme un tableau 2D contenant seulement une ligne, c'est pourquoi sa forme est (1, 3).
Mais que se passerait-il si vous le créiez comme un tableau 1D avec une forme de (3,) ?
Nombre différent de dimensions
Lorsqu'un tableau possède moins de dimensions qu'un autre, les dimensions manquantes sont considérées comme ayant une taille de 1. Considérons deux tableaux de formes (2, 3) et (3,). Ici, 3 = 3, et la dimension gauche manquante est considérée comme étant 1, donc la forme (3,) devient (1, 3). Puisque les formes (2, 3) et (1, 3) sont compatibles, ces deux tableaux peuvent être diffusés.
123456789import numpy as np array_1 = np.array([[1, 2, 3], [4, 5, 6]]) print(array_1.shape) # Creating a 1D array array_2 = np.array([11, 12, 13]) print(array_2.shape) # Broadcasting and element-wise addition result = array_1 + array_2 print(result)
Diffusion des scalaires
En plus des opérations mathématiques avec des tableaux, il est également possible d'effectuer des opérations similaires entre un tableau et un scalaire (nombre) grâce à la diffusion. Dans ce cas, le tableau peut avoir n'importe quelle forme, car un scalaire n'a essentiellement pas de forme et toutes ses dimensions sont considérées comme étant 1. Par conséquent, les formes sont toujours compatibles.
123456import numpy as np array = np.array([[1, 2, 3], [4, 5, 6]]) print(array.shape) # Broadcasting and element-wise addition result = array + 10 print(result)
Formes incompatibles
Exemple de formes incompatibles, où une opération arithmétique ne peut pas être effectuée car le broadcasting n'est pas possible :
Vous disposez d'un tableau 2x3 et d'un tableau 1D de longueur 2, c'est-à-dire une forme (2,). La dimension manquante est considérée comme 1, donc les formes deviennent (2, 3) et (1, 2).
En partant de la dimension la plus à droite : 3=2, il y a donc immédiatement des dimensions incompatibles, et donc des formes incompatibles. Si vous essayez d'exécuter le code, vous obtiendrez une erreur :
12345678import numpy as np array_1 = np.array([[1, 2, 3], [4, 5, 6]]) print(array_1.shape) array_2 = np.array([11, 12]) print(array_2.shape) # ValueError result = array_1 + array_2 print(result)
Merci pour vos commentaires !
Demandez à l'IA
Demandez à l'IA
Posez n'importe quelle question ou essayez l'une des questions suggérées pour commencer notre discussion