ConsigneRedimensionne et découpe des arrays avec reshape et slicing
Les arrays NumPy peuvent être redimensionnés (reshape) ou découpés (slicing). Le plus souvent ces opérations ne copient rien : elles renvoient une vue sur les mêmes données, ce qui est très efficace. reshape doit tout de même recopier quand l'ordre des éléments en mémoire l'exige, par exemple après une transposée. np.shares_memory(a, b) dit si deux arrays partagent la même mémoire.
a = np.arange(12) # shape (12,)b = a.reshape(3, 4) # shape (3, 4) → 3 lignes × 4 colonnesc = a.reshape(2, 2, 3) # shape (2, 2, 3) → 3Dd = 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.
a.flatten() → retransforme en 1D (renvoie une COPIE)a.ravel() → retransforme en 1D (renvoie une VUE si possible, plus efficace)a = np.array([10, 20, 30, 40, 50])a[1:4] → [20 30 40]a[::2] → [10 30 50]a[::-1] → inversé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)b.T → échange lignes et colonnesnp.transpose(b) → équivalentLes 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).
Envie d'aller plus loin ? Découvrez nos formations certifiées Bac+2 à Bac+5 →