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!