2010-11-30 12 views
3

En pur, unvectorised, Python je peux utiliser,équivalent de 'dans' pour comparer deux tableaux NumPy

>>> a = 9 
>>> b = [5, 7, 12] 
>>> a in b 
False 

Je voudrais faire quelque chose de similaire pour les tableaux en Numpy-à-dire

>>> a = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]) 
>>> b = np.array([5, 7, 12]) 
>>> a in b 
np.array([False, False, False, False, True, False, True, False, False, False])

. .. bien que cela ne fonctionne pas.

Existe-t-il une fonction ou une méthode qui réalise cela? Sinon, quelle est la meilleure façon de le faire?

Répondre

8

Vous recherchez in1d:

>>> import numpy as np 
>>> a = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]) 
>>> b = np.array([5, 7, 12]) 
>>> np.in1d(a, b) 
array([False, False, False, False, True, False, True, False, False, False], dtype=bool) 
1

Vous comparez deux choses très différentes. Avec les listes Python pures, vous avez un int et une liste. Avec numpy, vous avez deux tableaux numpy. Si vous changez a en int, alors cela fonctionne comme prévu en numpy.

>>> a = 9 
>>> b = np.array([5, 7, 12]) 
>>> a in b 
False 

Notez également que ce que vous affichez avec deux listes est un résultat assez intuitif. Le tableau retourné vous montre, pour chaque valeur du tableau a, est-ce que c'est b? 5 et 7 sont, les autres ne le sont pas. D'où le résultat donné.

+0

Oui, les deux cas de liste est intuitive, mais cela est _not_ comment Numpy se comporte (bien que je voudrais à!) - J'ai modifié à la question à rends ceci plus clair ... – Brendan

+0

Bon, je vois que le code que vous avez fourni ne fonctionne pas. Mal interpréter. Bien qu'accordé, 'a in b' fonctionne de la même façon pour numpy que pour les listes Python. – marcog

0

Vous voudrez peut-être implémenter des algorithmes de recherche de chaînes si vous voulez tester si une séquence contient une autre séquence. Reference from Wikipedia