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 de référence 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 sur un tableau complet.
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!