Contenu du cours
Numpy Ultime
Numpy Ultime
Diffusion
Avant de plonger dans les opérations mathématiques avec NumPy, il est important de comprendre un concept clé — broadcasting.
Lorsque NumPy travaille avec deux tableaux, il vérifie leurs formes pour la compatibilité afin de déterminer s'ils peuvent être diffusés ensemble.
Remarque
Si deux tableaux ont déjà la même forme, le broadcasting n'est pas nécessaire.
Même Nombre de Dimensions
Supposons que nous ayons deux tableaux pour lesquels nous voulons 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. C'est-à-dire qu'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 entraîne une opération d'addition standard entre matrices de la même forme, qui est effectuée élément par élément.
import 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)
Remarque
array_1
est créé comme un tableau 2D contenant uniquement une ligne, c'est pourquoi sa forme est(1, 3)
.
Mais que se passerait-il si nous le créions comme un tableau 1D avec une forme de (3,)
?
Différent Nombre de Dimensions
Lorsqu'un tableau a moins de dimensions que l'autre, les dimensions manquantes sont considérées comme ayant une taille de 1. Par exemple, considérons deux tableaux avec des 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)
. Étant donné que les formes (2, 3)
et (1, 3)
sont compatibles, ces deux tableaux peuvent être diffusés.
import 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, nous pouvons également 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.
import 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
Considérons également un exemple de formes incompatibles, où une opération arithmétique ne peut pas être effectuée car le broadcasting n'est pas possible :
Nous avons un tableau 2x3
et un tableau 1D de longueur 2
, c'est-à-dire une forme de (2,)
. La dimension manquante est considérée comme étant 1, donc les formes deviennent (2, 3)
et (1, 2)
.
En allant de gauche à droite : 3 != 2, donc nous avons immédiatement des dimensions incompatibles, et donc des formes incompatibles. Si nous essayons d'exécuter le code, nous obtiendrons une erreur :
import 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 !