Comment Changer les Dimensions d'une Matrice Numpy en Python ?

Introduction

Modifier la forme (ou reshape) d’un tableau est l’une des opérations les plus courantes lorsque l’on travaille avec NumPy. Que vous prépariez des données pour le machine learning, manipuliez des images multidimensionnelles ou réalisiez des calculs vectorisés, comprendre les formes de tableaux est essentiel.

Ce guide présente les méthodes indispensables pour examiner et modifier la forme des tableaux NumPy — avec des exemples pratiques et quelques astuces méconnues.

Obtenir la Forme et la Taille d’un Tableau NumPy

Avant de remodeler un tableau, il faut comprendre sa structure actuelle — sa shape (dimensions) et sa size (nombre total d’éléments).

1
2
3
4
import numpy as np

np.random.seed(42)
data = np.random.randint(0, 100, (4, 5))

Ce qui produit :

1
2
3
4
array([[51, 92, 14, 71, 60],
       [20, 82, 86, 74, 74],
       [87, 99, 23,  2, 21],
       [52,  1, 87, 29, 37]])

Vérifier la forme avec .shape

1
data.shape

Sortie :

1
(4, 5)

Vérifier le nombre d’éléments avec .size

1
data.size

Sortie :

1
20

Règle fondamentale :

Une opération de reshape doit conserver le nombre total d’éléments.

Par exemple :
4 × 5 = 2 × 10 = 10 × 2 = 20

Remodeler un Tableau NumPy

Utiliser .reshape()

La méthode principale pour changer les dimensions d’un tableau :

1
reshaped_data = data.reshape((2, 10))

Résultat :

1
2
array([[51, 92, 14, 71, 60, 20, 82, 86, 74, 74],
       [87, 99, 23,  2, 21, 52,  1, 87, 29, 37]])

Important : .reshape() renvoie une vue (view) lorsque c’est possible, et non une copie.

Utiliser -1 pour que NumPy devine une dimension

1
reshaped_data = data.reshape((-1, 2))

Sortie :

1
2
3
4
5
6
array([[51, 92],
       [14, 71],
       [60, 20],
       ...
       [ 1, 87],
       [29, 37]])

Mais certaines formes impossibles échouent :

1
data.reshape((-1, 3))

Erreur :

1
ValueError: cannot reshape array of size 20 into shape (3)

Aplatir un Tableau

Transformer un tableau multidimensionnel en un tableau 1D :

1
flat = data.flatten()

Sortie :

1
array([51, 92, 14, 71, 60, 20, ..., 29, 37])

Vous pouvez ensuite restaurer la forme :

1
flat.reshape((4, 5))

Une meilleure alternative : ravel()

  • flatten() crée toujours une copie
  • ravel() renvoie une vue lorsque possible

    flat_view = data.ravel()

Plus léger en mémoire et souvent plus rapide.

Transposer un Tableau

Pour échanger lignes et colonnes :

1
data.T

Équivalent :

1
data.transpose()

Résultat :

1
2
3
4
5
array([[51, 20, 87, 52],
       [92, 82, 99,  1],
       [14, 86, 23, 87],
       [71, 74,  2, 29],
       [60, 74, 21, 37]])

Manipulations Avancées des Formes

1. Ajouter ou Supprimer des Dimensions avec np.newaxis / None

Ajouter une nouvelle dimension (utile en ML) :

1
data_3d = data[:, :, np.newaxis]  # devient (4, 5, 1)

Créer un batch de 1 échantillon :

1
batch = data[np.newaxis, :]  # forme : (1, 4, 5)

Transformer en vecteur colonne :

1
col = data.flatten()[:, None]  # (20, 1)

2. Utiliser swapaxes et moveaxis

Pour les tableaux multidimensionnels :

1
2
np.swapaxes(arr, 0, 2)
np.moveaxis(arr, 2, 0)

Essentiel pour manipuler les images en format CHW vs HWC.

3. Remodelage pour les Modèles de Machine Learning

Les bibliothèques ML attendent souvent :

  • une ligne = un échantillon
  • une colonne = une caractéristique

Créer 20 échantillons à une seule caractéristique :

1
X = data.reshape(-1, 1)

Créer un échantillon unique avec 20 caractéristiques :

1
X = data.reshape(1, -1)

Créer des fenêtres glissantes :

1
2
seq = np.arange(12)
windows = seq.reshape(3, 4)  # 3 fenêtres de taille 4

4. Remodeler des Images

Image RGB 100×100 :

1
image = np.random.rand(100, 100, 3)

Passer en format “channel-first” (PyTorch) :

1
image_chw = image.transpose(2, 0, 1)  # (3, 100, 100)

Aplatir pour du ML :

1
pixels = image.reshape(-1, 3)  # tableau 10 000 × 3

5. Changer l’Ordre Mémoire (order='C' ou 'F')

Ordre ligne-major (C) vs colonne-major (Fortran) :

1
data.reshape((2, 10), order='F')

Critique pour interfacer avec Fortran ou MATLAB.

Résumé

Opération Objectif Exemple
shape Obtenir les dimensions data.shape
size Nombre total d’éléments data.size
reshape Modifier les dimensions data.reshape((2,10))
reshape(-1, …) Dimension auto-déduite data.reshape(-1,2)
flatten Copie 1D data.flatten()
ravel Vue 1D data.ravel()
transpose / .T Permuter les axes data.T
newaxis Ajouter des dimensions data[:, :, None]
swapaxes, moveaxis Réordonner les axes moveaxis(arr, 2, 0)

Références

Liens Site
reshape numpy.org
transpose numpy.org
flatten numpy.org
ravel numpy.org
array-manipulation numpy.org