tester si un tableau Numpy contient une ligne donnée

Est-il un Pythonic et efficace pour vérifier si un tableau Numpy contient au moins une instance d'une ligne donnée? Par "efficace", je veux dire il se termine sur la découverte de la première ligne plutôt que de parcourir l'ensemble du tableau, même si un résultat a déjà été trouvé.

Avec Python tableaux ceci peut être accompli très proprement avec if row in array:, mais cela ne fonctionne pas comme je voudrais attendre pour les tableaux Numpy, comme illustré ci-dessous.

Avec Python tableaux:

>>> a = [[1,2],[10,20],[100,200]]
>>> [1,2] in a
True
>>> [1,20] in a
False

mais Numpy tableaux différents et plutôt bizarre résultats de recherche. (Le __contains__ méthode de ndarray semble être sans-papiers.)

>>> a = np.array([[1,2],[10,20],[100,200]])
>>> np.array([1,2]) in a
True
>>> np.array([1,20]) in a
True
>>> np.array([1,42]) in a
True
>>> np.array([42,1]) in a
False
Vous êtes désireux de l'impossible. Numpy n'est actuellement pas fournir tout ce qui va arrêter lors de la constatation de la première. Cependant, si vous faites cela plusieurs fois de tri des approches beaucoup plus efficace de toute façon. Comme pour le comportement de __contains__ je dirais presque qu'il s'agit d'un bug (c'est à dire qu'il fonctionne très bien pour les scalaires, mais les tableaux sont un peu bizarre, mais intérieurement il est juste tom10 dit de toute façon)
êtes-vous sûr qu'aucune solution n'existe? Si oui, alors c'est la réponse à ma question, donc s'il vous plaît poster et si je suis convaincu que je vais l'accepter. Aussi, si vous pourriez nous expliquer ce que vous entendez par "trier les approches fondées sur les" il serait utile. Mon tableau est en fait triés afin que le plus souvent recherchés-pour les lignes ont tendance à être vers le haut, si c'est ce que tu veux dire - mais ce n'est pas utiliser, à moins que la méthode de requête s'arrête une fois qu'il trouve une correspondance.
si __collect__ était en train de faire ce que tom10 dit la dernière entrée de la ligne cité dans ma question serait de retour True, non?

OriginalL'auteur Nathaniel | 2013-02-08