Diffusion
Avant d'aborder les opérations mathématiques dans NumPy, il est essentiel de comprendre un concept clé : le broadcasting.
Le broadcasting est une méthode permettant d'aligner les formes des tableaux afin d'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 la compatibilité de leurs formes pour déterminer s'ils peuvent être diffusé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 nous ayons deux tableaux pour lesquels nous souhaitons 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 uniquement une seule ligne, ce qui explique 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,) ?
Nombre de dimensions différent
Lorsqu'un tableau possède moins de dimensions qu'un autre, les dimensions manquantes sont considérées comme ayant une taille de 1. Par exemple, 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
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 (2,). La dimension manquante est considérée comme 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 :
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
Can you explain more about how broadcasting works with higher-dimensional arrays?
What kind of error message do you get when shapes are incompatible?
Can you give more real-world examples where broadcasting is useful?
Awesome!
Completion rate improved to 3.7
Diffusion
Glissez pour afficher le menu
Avant d'aborder les opérations mathématiques dans NumPy, il est essentiel de comprendre un concept clé : le broadcasting.
Le broadcasting est une méthode permettant d'aligner les formes des tableaux afin d'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 la compatibilité de leurs formes pour déterminer s'ils peuvent être diffusé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 nous ayons deux tableaux pour lesquels nous souhaitons 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 uniquement une seule ligne, ce qui explique 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,) ?
Nombre de dimensions différent
Lorsqu'un tableau possède moins de dimensions qu'un autre, les dimensions manquantes sont considérées comme ayant une taille de 1. Par exemple, 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
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 (2,). La dimension manquante est considérée comme 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 :
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 !