Découper un tableau 2D dans NumPy

Muhammad Maisam Abbas 30 janvier 2023
  1. Slice 2D Array avec indexation de tableau dans NumPy
  2. Slice 2D Array avec la fonction numpy.ix_() dans NumPy
Découper un tableau 2D dans NumPy

Ce tutoriel présentera comment découper un tableau 2D dans NumPy.

Slice 2D Array avec indexation de tableau dans NumPy

Si nous avons un tableau NumPy 2D principal et que nous voulons en extraire un autre sous-tableau 2D, nous pouvons utiliser la méthode d’indexation de tableau à cette fin. Prenons un tableau de forme 4*4 pour cet exemple. Il est assez simple d’extraire le premier et le dernier élément du tableau. Par exemple, array[0:2,0:2] nous donnera une vue ou un sous-tableau qui contient les deux premiers éléments à l’intérieur du tableau à la fois verticalement et horizontalement. De même, array[2:,2:] nous donnera une vue ou un sous-tableau qui contient les deux derniers éléments à l’intérieur du tableau à la fois verticalement et horizontalement. Le travail le plus complexe consiste à obtenir les éléments de différentes lignes et colonnes en sautant une ligne ou une colonne du milieu. L’exemple de code suivant nous montre exactement comment y parvenir avec l’indexation de tableau en Python.

import numpy as np

x = range(16)

x = np.reshape(x, (4, 4))
print(x)

y = x[[[0], [2]], [1, 3]]
print(y)

Production:

[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]
 [12 13 14 15]]
[[ 1  3]
 [ 9 11]]

Dans le code ci-dessus, nous avons extrait les éléments des lignes 1 et 3 qui se croisent avec les colonnes 1 et 3 tout en sautant la ligne 2 et la colonne 2 avec la méthode d’indexation de tableau en Python. Cela peut également être fait avec une approche similaire mais avec une syntaxe différente, comme indiqué dans l’exemple de codage ci-dessous.

import numpy as np

x = range(16)

x = np.reshape(x, (4, 4))
print(x)

y = x[0::2, 1::2]
print(y)

Production:

[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]
 [12 13 14 15]]
[[ 1  3]
 [ 9 11]]

Dans le code ci-dessus, nous avons également extrait les éléments des lignes 1 et 3 qui se croisent avec les colonnes 1 et 3 tout en sautant les lignes 2 et 2 avec la méthode d’indexation de tableau en Python. Cette méthode est plus simple que l’approche précédente car elle n’implique pas trop de parenthèses et est globalement plus lisible.

Slice 2D Array avec la fonction numpy.ix_() dans NumPy

La fonction numpy.ix_() forme une séquence d’éléments sous forme de maillage ouvert en Python. Cette fonction prend n tableaux 1D et renvoie un tableau nD. Nous pouvons utiliser cette fonction pour extraire des tranches 1D individuelles de notre tableau principal, puis les combiner pour former un tableau 2D. L’exemple de code suivant fait le même travail que les exemples précédents mais en utilisant la fonction numpy.ix_() avec indexation de tableau en Python.

import numpy as np

x = range(16)

x = np.reshape(x, (4, 4))
print(x)

y = x[np.ix_([0, 2], [1, 3])]
print(y)

Production:

[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]
 [12 13 14 15]]
[[ 1  3]
 [ 9 11]]

Dans le code ci-dessus, nous avons essentiellement fait exactement la même chose que les exemples précédents, mais en utilisant la fonction np.ix_() avec l’indexation de tableau en Python.

L’idée principale derrière tous ces exemples est la même. Lorsque nous avons créé notre tableau principal, un tampon lui a été alloué en fonction de sa forme et de sa taille. La méthode d’indexation de tableau crée un nouvel objet de type de données tableau qui pointe vers la mémoire tampon de notre tableau principal. Dans tous les exemples ci-dessus, même si y est un nouveau tableau, mais il ne prend aucun tampon en mémoire. Il ne pointe qu’à certains endroits de la mémoire tampon du tableau x. C’est ce qui rend la méthode d’indexation de tableau meilleure que la simple création d’un nouveau tableau.

Muhammad Maisam Abbas avatar Muhammad Maisam Abbas avatar

Maisam is a highly skilled and motivated Data Scientist. He has over 4 years of experience with Python programming language. He loves solving complex problems and sharing his results on the internet.

LinkedIn