Recherche efficace des instances d'une ligne spécifique dans un tableau NumPy
Lorsque vous travaillez avec des tableaux NumPy, il peut être nécessaire de déterminer si le array contient une ligne spécifique, mais la méthode standard contains pour ndarray soulève des questions. Cet article présente des solutions efficaces et pythoniques à ce problème.
Une approche consiste à convertir le tableau NumPy en une liste Python à l'aide de .tolist() et à effectuer des vérifications d'adhésion sur la liste.
a = np.array([[1,2],[10,20],[100,200]]) [1,2] in a.tolist() # Returns True [1,20] in a.tolist() # Returns False
Une autre méthode consiste à utiliser une vue sur le tableau et à appliquer la fonction .all(1) pour comparer chaque ligne avec la ligne cible par élément .
any((a[:]==[1,2]).all(1)) # Returns True any((a[:]==[1,20]).all(1)) # Returns False
De plus, on peut générer sur la liste NumPy pour une amélioration potentielle des performances. Cependant, cette approche peut s'avérer inefficace si un résultat n'est pas trouvé rapidement.
any(([1,2] == x).all() for x in a) # Stops on first occurrence
Enfin, les fonctions logiques de NumPy fournissent un moyen concis d'effectuer des comparaisons.
any(np.equal(a,[1,2]).all(1)) # Returns True
Les résultats du benchmark indiquent que les routines numpy maintiennent une vitesse de recherche constante quels que soient les scénarios de réussite ou d'échec. Les approches vue, logique égale et Python dans les opérateurs sont comparables en termes d'efficacité, tandis que le générateur sur NumPy n'est pas recommandé pour les recherches de tableaux complets.
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3