Skip to content

Convertir un tableau 1D en tableau 2D en Python (numpy.ndarray, list)

Cet article explique comment convertir un tableau unidimensionnel en tableau bidimensionnel en Python, à la fois pour les tableaux NumPy ndarray et pour les listes de listes intégrées.

  • Convertir un numpy.ndarray unidimensionnel en un numpy.ndarray bidimensionnel
  • Convertir une liste à une dimension en une liste à deux dimensions

Au contraire, consultez l’article suivant sur la façon de convertir (= aplatir) un tableau multidimensionnel en un tableau unidimensionnel.

Convertir un numpy.ndarray unidimensionnel en un numpy.ndarray bidimensionnel

Utilisez la méthode reshape() pour transformer la forme d’un ndarray de tableau NumPy. Toute transformation de forme est possible, sans se limiter à la transformation d’un tableau unidimensionnel en un tableau bidimensionnel.

En utilisant -1, la taille de la dimension est automatiquement calculée.

import numpy as np

a = np.arange(6)
print(a)
# [0 1 2 3 4 5]

print(a.reshape(2, 3))
# [[0 1 2]
#  [3 4 5]]

print(a.reshape(-1, 3))
# [[0 1 2]
#  [3 4 5]]

print(a.reshape(2, -1))
# [[0 1 2]
#  [3 4 5]]

Si vous spécifiez une forme qui ne peut pas être convertie, une erreur est générée.

# print(a.reshape(3, 4))
# ValueError: cannot reshape array of size 6 into shape (3,4)

# print(a.reshape(-1, 4))
# ValueError: cannot reshape array of size 6 into shape (4)

Convertir une liste à une dimension en une liste à deux dimensions

Avec NumPy

Avec NumPy, vous pouvez convertir la liste en numpy.ndarray et transformer la forme avec reshape(), puis la renvoyer à la liste.

l = [0, 1, 2, 3, 4, 5]

print(np.array(l).reshape(-1, 3).tolist())
# [[0, 1, 2], [3, 4, 5]]

print(np.array(l).reshape(3, -1).tolist())
# [[0, 1], [2, 3], [4, 5]]

Consultez l’article suivant sur la façon de convertir numpy.ndarray et la liste les uns aux autres.

Sans NumPy

Sans NumPy, vous pouvez utiliser les compréhensions de liste, la plage () et les tranches comme suit.

def convert_1d_to_2d(l, cols):
    return [l[i:i + cols] for i in range(0, len(l), cols)]

l = [0, 1, 2, 3, 4, 5]

print(convert_1d_to_2d(l, 2))
# [[0, 1], [2, 3], [4, 5]]

print(convert_1d_to_2d(l, 3))
# [[0, 1, 2], [3, 4, 5]]

print(convert_1d_to_2d(l, 4))
# [[0, 1, 2, 3], [4, 5]]

Le premier argument est la liste d’origine, et le second argument est le nombre d’éléments de la liste interne (= nombre de colonnes). S’il y a un reste, une liste avec un nombre différent d’éléments sera stockée, comme dans le dernier exemple.

Si vous souhaitez spécifier le nombre de lignes :

def convert_1d_to_2d_rows(l, rows):
    return convert_1d_to_2d(l, len(l) // rows)

print(convert_1d_to_2d_rows(l, 2))
# [[0, 1, 2], [3, 4, 5]]

print(convert_1d_to_2d_rows(l, 3))
# [[0, 1], [2, 3], [4, 5]]

print(convert_1d_to_2d_rows(l, 4))
# [[0], [1], [2], [3], [4], [5]]

La fonction dans cet exemple est simple. S’il n’est pas divisible, le résultat est différent du nombre de lignes spécifié, comme dans le dernier exemple.