Module 2
Opérations et Manipulations avec Numpy
Apprendre à manipuler les données dans les tableaux : calculs, statistiques, sélection.
2.1. La magie de la Vectorisation
C'est le concept le plus important. Au lieu d'écrire une boucle for pour additionner chaque élément de deux tableaux, vous faites simplement tableau1 + tableau2. C'est plus lisible et infiniment plus rapide.
import numpy as np
# Sans vectorisation (lent et verbeux)
list1 = [1, 2, 3]
list2 = [4, 5, 6]
resultat_liste = []
for i in range(len(list1)):
resultat_liste.append(list1[i] + list2[i])
print("Résultat avec une boucle for:", resultat_liste)
# Avec la vectorisation Numpy (rapide et concis)
arr1 = np.array(list1)
arr2 = np.array(list2)
resultat_arr = arr1 + arr2
print("Résultat avec Numpy:", resultat_arr)
Cela s'applique à toutes les opérations : * (multiplication), / (division), ** (puissance), et aussi aux fonctions Numpy comme np.sqrt() (racine carrée).
2.2. Indexing et Slicing
Comme avec les listes, on peut extraire des parties d'un tableau.
import numpy as np
arr = np.arange(10) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
# Indexing simple
print("Le 3ème élément:", arr[2]) # 2
# Slicing (extraire une tranche)
print("Éléments de l'index 2 à 5:", arr[2:6]) # [2, 3, 4, 5]
# Pour les tableaux 2D, on utilise [ligne, colonne]
arr_2d = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print("Élément à la ligne 1, colonne 2:", arr_2d[1, 2]) # 6
# Extraire la première colonne entière (toutes les lignes, colonne 0)
print("Première colonne:", arr_2d[:, 0]) # [1, 4, 7]
2.3. Calculs Statistiques
Numpy excelle dans le calcul de statistiques sur de grands volumes de données.
import numpy as np
data = np.array([15, 20, 22, 28, 35, 40])
print("Moyenne:", data.mean())
print("Somme:", data.sum())
print("Écart-type:", data.std())
print("Valeur maximale:", data.max())
Exercices Pratiques
Exercice 1 : Vectorisation et Conditions
Créez un tableau Numpy allant de 1 à 20. À l'aide d'opérations vectorielles, mettez au carré tous les nombres de ce tableau. Ensuite, utilisez le "boolean indexing" pour n'afficher que les nombres au carré qui sont supérieurs à 100.
Voir la solution
import numpy as np
# Crée un tableau de 1 à 20
nombres = np.arange(1, 21)
# Met au carré tous les éléments en une seule opération
nombres_carres = nombres ** 2
print("Nombres au carré :", nombres_carres)
# Crée un masque booléen pour les valeurs > 100
masque = nombres_carres > 100
# Applique le masque pour filtrer le tableau
resultat = nombres_carres[masque]
print("Nombres au carré > 100 :", resultat)
Exercice 2 : Slicing de Matrice
Créez une matrice Numpy 4x4 contenant les nombres de 0 à 15. À partir de cette matrice, extrayez le carré central 2x2 (contenant les valeurs 5, 6, 9, 10).
Voir la solution
import numpy as np
# Crée une matrice 4x4 avec les nombres de 0 à 15
matrice = np.arange(16).reshape(4, 4)
print("Matrice originale :\n", matrice)
# On sélectionne les lignes d'index 1 et 2 (1:3)
# et les colonnes d'index 1 et 2 (1:3)
carre_central = matrice[1:3, 1:3]
print("\nCarré central 2x2 :\n", carre_central)
Exercice 3 : Statistiques sur un Axe
Créez une matrice 3x4 de nombres aléatoires. Calculez la moyenne de chaque colonne, puis la somme de chaque ligne.
Voir la solution
import numpy as np
# Crée une matrice 3x4 avec des nombres aléatoires
matrice_aleatoire = np.random.randint(0, 100, size=(3, 4))
print("Matrice aléatoire :\n", matrice_aleatoire)
# axis=0 spécifie que l'opération se fait verticalement (sur les colonnes)
moyenne_colonnes = matrice_aleatoire.mean(axis=0)
print("\nMoyenne de chaque colonne :", moyenne_colonnes)
# axis=1 spécifie que l'opération se fait horizontalement (sur les lignes)
somme_lignes = matrice_aleatoire.sum(axis=1)
print("Somme de chaque ligne :", somme_lignes)