Dans ce tutoriel, vous apprendrez à utiliser la fonction NumPy argmax() pour trouver l’index de l’élément maximum dans les tableaux.
NumPy est une bibliothèque puissante pour le calcul scientifique en Python ; elle fournit des tableaux à N dimensions qui sont plus performants que les listes Python. L’une des opérations courantes que vous effectuerez lorsque vous travaillerez avec des tableaux NumPy consistera à trouver la valeur maximale du tableau. Cependant, vous pouvez parfois vouloir trouver l’index auquel la valeur maximale se trouve.
La fonction argmax()
vous aide à trouver l’indice du maximum dans les tableaux unidimensionnels et multidimensionnels. Voyons maintenant comment elle fonctionne.
Comment trouver l’index de l’élément maximum dans un tableau NumPy ?
Pour suivre ce tutoriel, vous devez avoir installé Python et NumPy. Vous pouvez coder en démarrant une REPL Python ou en lançant un notebook Jupyter.
Tout d’abord, importons NumPy sous l’alias habituel np
.
import numpy as np
Vous pouvez utiliser la fonction NumPy max()
pour obtenir la valeur maximale d’un tableau (éventuellement le long d’un axe spécifique).
array_1 = np.array([1,5,7,2,10,9,8,4])
print(np.max(array_1))
# Sortie
10
Dans ce cas, np.max(array_1)
renvoie 10, ce qui est correct.
Supposons que vous souhaitiez trouver l’indice auquel la valeur maximale apparaît dans le tableau. Vous pouvez adopter l’approche suivante en deux étapes :
- Trouvez l’élément maximal.
- Trouvez l’indice de l’élément maximal.
Dans array_1
, la valeur maximale de 10 apparaît à l’indice 4, suivant l’indexation zéro. Le premier élément est à l’indice 0 ; le deuxième élément est à l’indice 1, et ainsi de suite.
Pour trouver l’indice auquel le maximum se produit, vous pouvez utiliser la fonction NumPy where(). np.where(condition)
renvoie un tableau de tous les indices pour lesquels la condition
est vraie
.
Vous devrez puiser dans le tableau et accéder à l’élément situé au premier indice. Pour trouver la valeur maximale, nous fixons la condition
à array_1==10
; rappelez-vous que 10 est la valeur maximale dans array_1
.
print(int(np.where(array_1==10)[0]))
# Sortie
4
Nous avons utilisé np.where()
avec seulement la condition, mais ce n’est pas la méthode recommandée pour utiliser cette fonction.
📑 Note : NumPy where() Fonction:
np.where(condition,x,y)
renvoie :– Les éléments de
x
lorsque la condition estvraie
, et
– Les éléments dey
lorsque la condition estFalse
.
Par conséquent, en enchaînant les fonctions np.max()
et np.where()
, nous pouvons trouver l’élément maximal, suivi de l’indice auquel il se trouve.
Au lieu de procéder en deux étapes, vous pouvez utiliser la fonction NumPy argmax() pour obtenir l’indice de l’élément maximal dans le tableau.
Syntaxe de la fonction NumPy argmax()
La syntaxe générale pour utiliser la fonction NumPy argmax() est la suivante :
np.argmax(array,axis,out)
# nous avons importé numpy sous l'alias np
Dans la syntaxe ci-dessus :
- array est un tableau NumPy valide.
- axis est un paramètre optionnel. Lorsque vous travaillez avec des tableaux multidimensionnels, vous pouvez utiliser le paramètre axis pour trouver l’index du maximum le long d’un axe spécifique.
- out est un autre paramètre facultatif. Vous pouvez définir le paramètre
out
sur un tableau NumPy pour stocker la sortie de la fonctionargmax()
.
Note: A partir de la version 1.22.0 de NumPy, il y a un paramètre supplémentaire
keepdims
. Lorsque nous spécifions le paramètreaxis
dans l’appel de la fonctionargmax()
, le tableau est réduit le long de cet axe. Mais en définissant le paramètrekeepdims
àTrue
, vous vous assurez que la sortie renvoyée a la même forme que le tableau d’entrée.
Utilisation de NumPy argmax() pour trouver l’index de l’élément maximum
#1. Utilisons la fonction NumPy argmax() pour trouver l’indice de l’élément maximum dans array_1
.
array_1 = np.array([1,5,7,2,10,9,8,4])
print(np.argmax(array_1))
# Sortie
4
La fonction argmax()
renvoie 4, ce qui est correct ! ✅
#2. Si nous redéfinissons array_1
de telle sorte que 10 apparaisse deux fois, la fonction argmax()
ne renvoie que l’indice de la première occurrence.
array_1 = np.array([1,5,7,2,10,10,8,4])
print(np.argmax(array_1))
# Sortie
4
Pour le reste des exemples, nous utiliserons les éléments de array_1
que nous avons définis dans l’exemple 1.
Utilisation de NumPy argmax() pour trouver l’index de l’élément maximum dans un tableau 2D
Reformatons le tableau NumPy array_1
en un tableau bidimensionnel avec deux lignes et quatre colonnes.
array_2 = array_1.reshape(2,4)
print(array_2)
# Sortie
[[ 1 5 7 2]
[10 9 8 4]]
Pour un tableau à deux dimensions, l’axe 0 représente les lignes et l’axe 1 représente les colonnes. Les tableaux NumPy suivent l’indexation zéro. Les indices des lignes et des colonnes du tableau NumPy array_2
sont donc les suivants :
Appelons maintenant la fonction argmax()
sur le tableau bidimensionnel array_2
.
print(np.argmax(array_2))
# Sortie
4
Bien que nous ayons appelé argmax()
sur le tableau bidimensionnel, la fonction renvoie toujours 4. Ce résultat est identique à celui obtenu pour le tableau unidimensionnel, array_1
, dans la section précédente.
Pourquoi cela se produit-il ? 🤔
C’est parce que nous n’avons pas spécifié de valeur pour le paramètre axis. Lorsque ce paramètre d’axe n’est pas défini, par défaut, la fonction argmax()
renvoie l’indice de l’élément maximal le long du tableau aplati.
Qu’est-ce qu’un tableau aplati ? S’il existe un tableau à N dimensions de forme d1 x d2 x … x dN, où d1, d2, jusqu’à dN sont les tailles du tableau selon les N dimensions, alors le tableau aplati est un long tableau à une dimension de taille d1 * d2 * … * dN.
Pour vérifier à quoi ressemble le tableau aplati pour array_2
, vous pouvez appeler la méthode flatten()
, comme indiqué ci-dessous :
array_2.flatten()
# Sortie
array([ 1, 5, 7, 2, 10, 9, 8, 4])
Indice de l’élément maximal le long des lignes (axe = 0)
Procédons à la recherche de l’indice de l’élément maximal le long des lignes (axe = 0).
np.argmax(array_2,axis=0)
# Sortie
array([1, 1, 1, 1])
Cette sortie peut être un peu difficile à comprendre, mais nous allons comprendre comment elle fonctionne.
Nous avons fixé le paramètre de l’axe
à zéro(axis = 0
), car nous souhaitons trouver l’indice de l’élément maximal le long des lignes. Par conséquent, la fonction argmax()
renvoie le numéro de ligne dans laquelle se trouve l’élément maximal pour chacune des trois colonnes.
Visualisons ceci pour une meilleure compréhension.
À partir du diagramme ci-dessus et de la sortie de la fonction argmax()
, nous obtenons les résultats suivants :
- Pour la première colonne à l’index 0, la valeur maximale 10 apparaît dans la deuxième ligne, à l’index = 1.
- Pour la deuxième colonne à l’indice 1, la valeur maximale 9 se produit dans la deuxième ligne, à l’indice = 1.
- Pour les troisième et quatrième colonnes aux indices 2 et 3, les valeurs maximales 8 et 4 apparaissent toutes deux dans la deuxième ligne, à l’indice = 1.
C’est précisément la raison pour laquelle nous avons le tableau de
sortie ([1, 1, 1, 1])
parce que l’élément maximal le long des lignes se produit dans la deuxième ligne (pour toutes les colonnes).
Indice de l’élément maximal le long des colonnes (axe = 1)
Utilisons ensuite la fonction argmax()
pour trouver l’indice de l’élément maximal le long des colonnes.
Exécutez l’extrait de code suivant et observez la sortie.
np.argmax(array_2,axis=1)
array([2, 0])
Pouvez-vous analyser la sortie ?
Nous avons défini axis = 1
pour calculer l’indice de l’élément maximal le long des colonnes.
La fonction argmax()
renvoie, pour chaque ligne, le numéro de la colonne dans laquelle se trouve la valeur maximale.
Voici une explication visuelle :
D’après le diagramme ci-dessus et la sortie de argmax()
, nous obtenons les résultats suivants :
- Pour la première ligne à l’index 0, la valeur maximale 7 se trouve dans la troisième colonne, à l’index = 2.
- Pour la deuxième ligne à l’index 1, la valeur maximale 10 se trouve dans la première colonne, à l’index = 0.
J’espère que vous comprenez maintenant la signification de la sortie array([2, 0])
.
Utilisation du paramètre optionnel out dans NumPy argmax()
Vous pouvez utiliser le paramètre optionnel out
dans la fonction NumPy argmax() pour stocker la sortie dans un tableau NumPy.
Initialisons un tableau de zéros pour stocker le résultat de l’appel précédent à la fonction argmax()
– pour trouver l’indice du maximum le long des colonnes(axe= 1
).
out_arr = np.zeros((2,))
print(out_arr)
[0. 0.]
Reprenons maintenant l’exemple de la recherche de l’indice de l’élément maximal le long des colonnes(axe = 1
) et fixons out
à out_arr
que nous avons défini ci-dessus.
np.argmax(array_2,axis=1,out=out_arr)
Nous voyons que l’interpréteur Python lance une TypeError
, car out_arr
a été initialisé à un tableau de flottants par défaut.
---------------------------------------------------------------------------
TypeError Traceback (dernier appel le plus récent)
/usr/local/lib/python3.7/dist-packages/numpy/core/fromnumeric.py in _wrapfunc(obj, method, *args, **kwds)
56 try :
--->
57 return bound(*args, **kwds)
58 except TypeError :
TypeError : Cannot cast array data from dtype('float64') to dtype('int64') according to the rule 'safe'
Par conséquent, lorsque vous définissez le paramètre out
pour le tableau de sortie, il est important de s’assurer que le tableau de sortie a la bonne forme et le bon type de données. Comme les indices des tableaux sont toujours des entiers, nous devons définir le paramètre dtype
à int
lors de la définition du tableau de sortie.
out_arr = np.zeros((2,),dtype=int)
print(out_arr)
# Sortie
[0 0]
Nous pouvons maintenant appeler la fonction argmax()
avec les paramètres axis
et out
, et cette fois, elle s’exécute sans erreur.
np.argmax(array_2,axis=1,out=out_arr)
La sortie de la fonction argmax()
est maintenant accessible dans le tableau out_arr
.
print(out_arr)
# Sortie
[2 0]
Conclusion
J’espère que ce tutoriel vous a aidé à comprendre comment utiliser la fonction NumPy argmax(). Vous pouvez exécuter les exemples de code dans un carnet Jupyter.
Passons en revue ce que nous avons appris.
- La fonction NumPy argmax() renvoie l’indice de l’élément maximal d’un tableau. Si l’élément maximal apparaît plus d’une fois dans un tableau a, alors np.argmax(a ) renvoie l’indice de la première occurrence de l’élément.
- Lorsque vous travaillez avec des tableaux multidimensionnels, vous pouvez utiliser le paramètre facultatif axis pour obtenir l’indice de l’élément maximal le long d’un axe particulier. Par exemple, dans un tableau à deux dimensions : en définissant axis = 0 et axis = 1, vous pouvez obtenir l’indice de l’élément maximal le long des lignes et des colonnes, respectivement.
- Si vous souhaitez stocker la valeur retournée dans un autre tableau, vous pouvez définir le paramètre optionnel out pour le tableau de sortie. Cependant, le tableau de sortie doit avoir une forme et un type de données compatibles.
Ensuite, consultez le guide approfondi sur les ensembles Python. Apprenez également à utiliser la fonction Sleep de Python pour ajouter des délais à votre code.