Présentation de l'indexation dans NumPy

NumPyNumPyBeginner
Pratiquer maintenant

This tutorial is from open-source community. Access the source code

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

Introduction

Dans ce laboratoire, nous allons explorer les bases de l'indexation dans NumPy. L'indexation nous permet d'accéder et de manipuler des éléments spécifiques ou des sous-ensembles d'éléments dans un tableau. Comprendre comment utiliser efficacement l'indexation est crucial pour travailler avec des tableaux dans NumPy.

Note: Vous pouvez écrire du code dans 02-indexing-on-ndarrays.ipynb. Certaines opérations d'impression sont omises dans les étapes, et vous pouvez imprimer la sortie selon vos besoins.

Import NumPy

Tout d'abord, importons la bibliothèque NumPy afin que nous puissions utiliser ses fonctions et ses types de données.

import numpy as np

Indexation de base

Les tableaux NumPy peuvent être indexés en utilisant la syntaxe standard Python x[obj], où x est le tableau et obj est la sélection. Il existe différents types d'indexation disponibles selon le type de obj.

Indexation d'un seul élément

L'indexation d'un seul élément fonctionne exactement comme l'indexation pour les autres séquences standard Python. Elle est basée sur 0 et accepte des indices négatifs pour indexer à partir de la fin du tableau.

x = np.arange(10)
print(x[2])  ## Sortie : 2
print(x[-2])  ## Sortie : 8

Indexation multidimensionnelle

Les tableaux peuvent avoir plusieurs dimensions, et l'indexation fonctionne de la même manière pour chaque dimension. Vous pouvez accéder à des éléments dans un tableau multidimensionnel en séparant l'index de chaque dimension par une virgule.

x = np.arange(10).reshape(2, 5)
print(x[1, 3])  ## Sortie : 8
print(x[1, -1])  ## Sortie : 9

Indexation de sous-tableau multidimensionnel

Si vous indexez un tableau multidimensionnel avec moins d'indices que de dimensions, vous obtenez un sous-tableau multidimensionnel. Chaque indice spécifié sélectionne le tableau correspondant aux autres dimensions sélectionnées.

x = np.arange(10).reshape(2, 5)
print(x[0])  ## Sortie : [0, 1, 2, 3, 4]

Tranches et incréments

La tranche de base en NumPy étend le concept de tranche de Python aux N dimensions. Elle vous permet de sélectionner une plage d'éléments le long de chaque dimension d'un tableau.

Tranche de base

La tranche de base se produit lorsque obj est un objet de tranche (construit par la notation start:stop:step à l'intérieur des crochets), un entier ou un tuple d'objets de tranche et d'entiers.

x = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
print(x[1:7:2])  ## Sortie : [1, 3, 5]

Indices négatifs

Les indices négatifs peuvent être utilisés pour indexer à partir de la fin du tableau. Par exemple, -1 fait référence au dernier élément, -2 fait référence au deuxième élément depuis la fin, etc.

x = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
print(x[-2:10])  ## Sortie : [8, 9]
print(x[-3:3:-1])  ## Sortie : [7, 6, 5, 4]

Valeurs par défaut pour la tranche

Si l'index de début n'est pas spécifié, il prend la valeur par défaut 0 pour les valeurs de pas positives et -n-1 pour les valeurs de pas négatives. Si l'index de fin n'est pas spécifié, il prend la valeur par défaut n pour les valeurs de pas positives et -n-1 pour les valeurs de pas négatives. Si le pas n'est pas spécifié, il prend la valeur par défaut 1.

x = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
print(x[5:])  ## Sortie : [5, 6, 7, 8, 9]

Indexation avancée

L'indexation avancée est déclenchée lorsque l'objet de sélection obj est un objet séquence non tuple, un ndarray (de type de données entier ou booléen) ou un tuple avec au moins un objet séquence ou ndarray (de type de données entier ou booléen). Il existe deux types d'indexation avancée : l'indexation entière et l'indexation booléenne.

Indexation d'un tableau d'entiers

L'indexation d'un tableau d'entiers permet de sélectionner des éléments arbitraires dans le tableau en fonction de leur index N-dimensionnel. Chaque tableau d'entiers représente un certain nombre d'indices dans cette dimension.

x = np.arange(10, 1, -1)
print(x[np.array([3, 3, 1, 8])])  ## Sortie : [7, 7, 9, 2]
print(x[np.array([3, 3, -3, 8])])  ## Sortie : [7, 7, 4, 2]

Indexation d'un tableau booléen

L'indexation d'un tableau booléen permet de sélectionner des éléments de tableau en fonction d'une condition booléenne. Le résultat est un nouveau tableau qui contient uniquement les éléments correspondant aux valeurs True du tableau booléen.

x = np.array([1., -1., -2., 3])
x[x < 0] += 20
print(x)  ## Sortie : [ 1., 19., 18., 3.]

Accès aux champs

Si l'objet ndarray est un tableau structuré, les champs du tableau peuvent être accédés en indexant le tableau avec des chaînes de caractères, de manière similaire à un dictionnaire.

x = np.array([(1, 2), (3, 4), (5, 6)], dtype=[('a', np.int32), ('b', np.int32)])
print(x['a'])  ## Sortie : [1, 3, 5]

Indexation avec l'itérateur plat

L'attribut x.flat renvoie un itérateur qui peut être utilisé pour itérer sur tout le tableau dans un style C-contigu. Cet itérateur peut également être indexé en utilisant une tranche de base ou une indexation avancée.

x = np.arange(10)
iterator = x.flat
print(iterator[1:5])  ## Sortie : [1, 2, 3, 4]

Attribution de valeurs à des tableaux indexés

Vous pouvez attribuer des valeurs à des éléments spécifiques ou à des sous-ensembles d'éléments dans un tableau en utilisant l'indexation. La valeur attribuée doit avoir une forme compatible avec le tableau indexé.

x = np.arange(10)
x[2:7] = 1
print(x)  ## Sortie : [0, 1, 1, 1, 1, 1, 7, 8, 9]

x = np.arange(10)
x[2:7] = np.arange(5)
print(x)  ## Sortie : [0, 1, 0, 1, 2, 3, 7, 8, 9]

Récapitulatif

Dans ce laboratoire, nous avons exploré les bases de l'indexation dans NumPy. Nous avons appris à utiliser l'indexation de base, la tranche, l'indexation avancée, l'accès aux champs, l'indexation avec l'itérateur plat et l'attribution de valeurs à des tableaux indexés. Comprendre ces techniques d'indexation est essentielle pour travailler efficacement avec des tableaux dans NumPy.