Exercice 55 / 100

NumPy — Reshape & Slicing

Redimensionne et découpe des arrays avec reshape et slicing

Les arrays NumPy peuvent être redimensionnés (reshape) ou découpés (slicing) sans copier les données — très efficace.

reshape : changer la forme

a = np.arange(12) # shape (12,) b = a.reshape(3, 4) # shape (3, 4) → 3 lignes × 4 colonnes c = a.reshape(2, 2, 3) # shape (2, 2, 3) → 3D d = a.reshape(-1, 4) # -1 = "calcule toi-même" → (3, 4)

Le produit des dimensions doit être égal au nombre total d'éléments.

reshape(3, 5) sur un array de 12 éléments → erreur.

reshape ne touche qu'à la forme : les douze éléments et le bloc en mémoire restent les mêmes, ce qui explique qu'une tranche partage la mémoire de l'array d'origine
a.flatten() → retransforme en 1D (renvoie une COPIE) a.ravel() → retransforme en 1D (renvoie une VUE si possible, plus efficace)

Slicing 1D : comme une liste Python

a = np.array([10, 20, 30, 40, 50]) a[1:4] → [20 30 40] a[::2] → [10 30 50] a[::-1] → inversé

Slicing 2D : ligne, colonne

Syntaxe : a[lignes, colonnes]

b = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9,10,11,12]])
b[0] → [1 2 3 4] (ligne 0) b[0, :] → [1 2 3 4] (équivalent) b[:, 1] → [2 6 10] (colonne 1) b[0:2, 1:3] → [[2 3] [6 7]] (sous-matrice) b[-1, -1] → 12 (dernier élément)

Transposée

b.T → échange lignes et colonnes np.transpose(b) → équivalent

⚠ Slicing = VUE, pas copie

Les slices NumPy partagent la mémoire de l'array d'origine. Modifier la slice modifie l'original :

s = a[1:4] s[0] = 999 # a est modifié aussi !

Pour une vraie copie : a[1:4].copy()

reshape + ravel sont les couteaux suisses des transformations d'arrays. Très utilisés en deep learning pour passer d'images (2D/3D) à des vecteurs (1D).

exercise.py

Envie d'aller plus loin ? Découvrez nos formations certifiées Bac+2 à Bac+5 →