NumPy est une bibliothèque fondamentale pour le calcul numérique en Python, offrant des outils puissants pour la manipulation efficace des tableaux. Ce tutoriel explore deux concepts fondamentaux : les opérations arithmétiques et la diffusion (broadcasting), essentiels pour écrire du code numérique concis et performant.
Table des matières
1. Opérations arithmétiques
NumPy étend de manière transparente les opérateurs arithmétiques de Python (+, -, *, /, //, %, **) pour qu’ils fonctionnent directement sur les tableaux NumPy. Ces opérations sont élément par élément, ce qui signifie qu’elles s’appliquent aux éléments correspondants des tableaux. Illustrons avec des exemples :
import numpy as np
arr1 = np.array([1, 2, 3, 4])
arr2 = np.array([5, 6, 7, 8])
print("Addition:", arr1 + arr2) # Résultat : [ 6 8 10 12]
print("Soustraction:", arr1 - arr2) # Résultat : [-4 -4 -4 -4]
print("Multiplication:", arr1 * arr2) # Résultat : [ 5 12 21 32]
print("Division:", arr1 / arr2) # Résultat : [0.2 0.33333333 0.42857143 0.5 ]
print("Division entière:", arr1 // arr2) # Résultat : [0 0 0 0]
print("Modulo:", arr1 % arr2) # Résultat : [1 2 3 4]
print("Exponentiation:", arr1 ** arr2) # Résultat : [ 1 64 2187 65536]
Cette opération élément par élément s’étend sans effort aux tableaux multidimensionnels.
2. Diffusion (Broadcasting)
La diffusion (broadcasting) est une fonctionnalité puissante de NumPy qui permet des opérations entre des tableaux de formes différentes, sous certaines conditions. Elle élimine le besoin de boucles explicites, améliorant ainsi considérablement les performances. Les règles principales de la diffusion sont :
- Règle 1 : Si les tableaux ont des dimensions inégales, la forme du plus petit tableau est complétée par des 1 en tête jusqu’à ce qu’elle corresponde à la dimensionalité du plus grand tableau.
- Règle 2 : Si un tableau a une dimension de taille 1 et que l’autre tableau a une dimension supérieure à 1, la dimension de taille 1 est étendue pour correspondre à la dimension la plus grande.
- Règle 3 : Si les tableaux ont des dimensions différentes et qu’aucune n’est de taille 1, une
ValueError
est levée.
Illustrons la diffusion :
import numpy as np
arr1 = np.array([[1, 2, 3], [4, 5, 6]])
arr2 = np.array([10, 20, 30])
result = arr1 + arr2 # Diffusion en action
print(result)
# Résultat :
# [[11 22 33]
# [14 25 36]]
Ici, arr2
(forme (3,)) est diffusé pour correspondre à la forme de arr1
(2, 3). Chaque ligne de arr1
est additionnée à arr2
, évitant ainsi les boucles explicites. La maîtrise de la diffusion est cruciale pour écrire du code NumPy efficace et lisible. Tenez toujours compte des formes des tableaux pour éviter des résultats ou des erreurs inattendus.