2010-11-30 12 views
3

In der reinen, unvectorised, Python ich verwenden kann,Equivalent von 'in' für den Vergleich zweier Numpy Arrays

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

Ich möchte etwas ähnliches für Arrays in Numpy tun, dh

>>> 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])

. .. obwohl das nicht funktioniert.

Gibt es eine Funktion oder eine Methode, die dies erreicht? Wenn nicht, was ist der einfachste Weg, dies zu tun?

Antwort

8

Sie suchen 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

Sie vergleichen zwei sehr unterschiedliche Dinge. Mit den reinen Python-Listen haben Sie einen Int und eine Liste. Mit numpy haben Sie zwei Nummernfelder. Wenn Sie a in ein int ändern, funktioniert es wie erwartet in numpy.

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

Beachten Sie auch, dass das, was Sie mit zwei Listen anzeigen, ein ziemlich intuitives Ergebnis ist. Das zurückgegebene Array zeigt Ihnen, für jeden Wert in Array a, ist es in b? 5 und 7 sind, die anderen nicht. Daher das gegebene Ergebnis.

+0

Ja, die beiden Listen Fall ist intuitiv, aber das ist _nicht_ wie Numpy verhält (obwohl Ich mag würde es!) - ich bearbeitet haben, um in Frage zu stellen Machen Sie das klarer ... – Brendan

+0

Okay, ich sehe, dass der von Ihnen bereitgestellte Code nicht funktioniert. Falsch gelesen. Obwohl "a in b" gewährt, funktioniert es für numpy genauso wie für Python-Listen. – marcog

0

Sie möchten möglicherweise eine Art von String-Suchalgorithmen implementieren, wenn Sie testen möchten, ob eine Sequenz eine andere Sequenz enthält. Reference from Wikipedia

Verwandte Themen