HOWTO · NumPy
Convertir un tableau 3D en tableau 2D en Python
La fonction reshape() du package NumPy peut être utilisée pour convertir un tableau 3D en tableau 2D en Python.
Sur cette page
Utilisez l’opération numpy.reshape() de NumPy pour convertir un tableau 3D en tableau 2D tout en conservant ses valeurs. Choisissez une forme 2D dont les dimensions ont le même produit que le nombre d’éléments du tableau d’entrée. Pour un tableau de forme (4, 2, 2), le passage à (4, 4) conserve chaque groupe du premier axe sur une ligne et combine les deux autres axes dans ses colonnes. Le regroupement approprié dépend de l’interprétation de vos données.
Comprendre la forme des tableaux 3D
Un tableau NumPy 3D possède trois axes, et arr.shape indique la longueur de chaque axe sous forme de tuple. Ces axes ne correspondent pas intrinsèquement à la profondeur, à la hauteur et à la largeur : leur signification dépend des données. Par exemple, les axes d’un tableau d’image peuvent représenter la hauteur, la largeur et les canaux de couleur, tandis que ceux d’une simulation peuvent représenter le temps, les lignes et les colonnes. Avant de modifier la forme, décidez quelles dimensions doivent devenir des lignes et lesquelles doivent être regroupées en colonnes. La modification de forme réorganise les axes, sans changer les valeurs.
Convertir un tableau 3D avec NumPy reshape()
Appelez reshape() avec un tuple contenant le nombre de lignes et de colonnes souhaité. Cet exemple crée les valeurs de 0 à 15, les organise dans un tableau de forme (4, 2, 2), puis regroupe chaque paire d’axes de fin pour obtenir quatre colonnes.
Exécutez cet exemple :
Le code et les libellés ou sorties affichés dans cette section restent en anglais.
import numpy as np
arr = np.arange(16).reshape(4, 2, 2)
arr_2d = arr.reshape(4, 4)
print("Input shape:", arr.shape)
print("Output shape:", arr_2d.shape)
print(arr_2d)
Input shape: (4, 2, 2)
Output shape: (4, 4)
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]
[12 13 14 15]]
La forme cible (4, 4) représente quatre lignes et quatre colonnes. NumPy conserve les valeurs selon l’ordre d’indexation choisi ; les nouvelles lignes regroupent donc les valeurs d’origine en fonction des axes sélectionnés. Choisissez une autre forme cible si votre tâche nécessite un regroupement différent : aucune disposition 2D ne convient à tous les jeux de données 3D.
Déduire la forme 2D à partir du tableau d’entrée
Lorsque les dimensions varient, récupérez-les avec arr.shape au lieu de les coder en dur. Si la forme d’entrée est (a, b, c) et que chaque tranche du premier axe doit devenir une ligne, la forme de sortie est (a, b * c). En code, définissez rows, height, width = arr.shape et utilisez arr.reshape(rows, height * width). Le premier axe reste ainsi intact, tandis que les deuxième et troisième axes sont combinés. Si les lignes souhaitées correspondent à un autre axe, réorganisez ou transposez d’abord les axes, puis choisissez une forme de sortie adaptée à cette interprétation.
Vous pouvez aussi demander à NumPy de déduire une dimension en indiquant -1, par exemple avec arr.reshape(arr.shape[0], -1). NumPy calcule cette dimension à partir du nombre d’éléments et des autres dimensions spécifiées. N’utilisez qu’une seule dimension à déduire afin que la forme cible ne soit pas ambiguë.
Ordre des éléments : styles C et Fortran
Par défaut, reshape() utilise l’ordre d’indexation de style C. NumPy parcourt alors l’axe le plus à droite en premier lorsqu’il lit les valeurs du tableau d’entrée et les place dans le résultat. Passez order='F' pour utiliser l’ordre d’indexation de style Fortran, dans lequel l’axe le plus à gauche varie en premier. L’argument order détermine la séquence d’indexation utilisée pour la modification de forme ; à lui seul, il ne garantit pas une disposition physique particulière en mémoire. La plupart des conversions peuvent utiliser l’ordre par défaut. Choisissez l’ordre Fortran uniquement si la séquence de valeurs du résultat doit suivre cette convention.
Compatibilité des formes et erreurs fréquentes
Le produit des dimensions d’entrée doit être égal au produit des dimensions de sortie demandées. Une entrée de forme (4, 2, 2) contient 16 éléments : (4, 4) ou (2, 8) peuvent donc contenir les mêmes valeurs, mais pas (4, 5). Si le nombre d’éléments de la forme demandée n’est pas compatible, NumPy déclenche une ValueError. Pour diagnostiquer cette erreur, vérifiez arr.size ou calculez les produits des dimensions. Vérifiez aussi que le regroupement choisi pour les lignes et les colonnes correspond au sens de vos données : une forme peut être mathématiquement compatible tout en organisant les valeurs d’une manière inadaptée à l’opération suivante.
Pour consulter les paramètres et le comportement de la fonction, reportez-vous à la documentation officielle de l’API NumPy reshape.