Maison >développement back-end >Tutoriel Python >Comment puis-je trouver efficacement les indices de plusieurs valeurs maximales dans un tableau NumPy ?

Comment puis-je trouver efficacement les indices de plusieurs valeurs maximales dans un tableau NumPy ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-02 13:24:15904parcourir

How Can I Efficiently Find the Indices of Multiple Maximum Values in a NumPy Array?

Récupération d'indices de plusieurs valeurs maximales dans des tableaux NumPy

NumPy fournit une fonction np.argmax pratique pour récupérer l'index de la valeur maximale dans un tableau. Cependant, que se passe-t-il si vous avez besoin de trouver les indices des N premières valeurs maximales ?

Solution

Les versions récentes de NumPy (1.8 et supérieures) introduisent la fonction argpartition pour cela but. Pour obtenir les indices des N premiers éléments, suivez ces étapes :

import numpy as np

# Original array
a = np.array([9, 4, 4, 3, 3, 9, 0, 4, 6, 0])

# Find indices of top N elements (N = 4 in this case)
ind = np.argpartition(a, -4)[-4:]

# Extract top N elements
top4 = a[ind]

# Print indices and top N elements
print("Indices:", ind)
print("Top 4 elements:", top4)

Explication

np.argpartition trie partiellement le tableau, le partitionnant en deux sous- tableaux : le premier sous-tableau contient les N premiers éléments (dans ce cas, les 4 plus grands éléments) et le deuxième sous-tableau contient les éléments restants. Le tableau retourné ind contient les indices des éléments du premier sous-tableau.

Le résultat dans cet exemple serait :

Indices: [1 5 8 0]
Top 4 elements: [4 9 6 9]

Optimisations

Si des index triés sont également nécessaires, vous pouvez les trier séparément :

sorted_ind = ind[np.argsort(a[ind])]

Cette étape nécessite O(k log k) time, où k est le nombre d’éléments supérieurs à récupérer. Dans l'ensemble, cette approche a une complexité temporelle de O(nk log k), ce qui la rend efficace pour les grands tableaux et les valeurs modérées de k.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn