2012-08-25 8 views
6

Ich habe ein numpy Master-Array. Bei einem anderen Array von Suchwerten mit sich wiederholenden Elementen möchte ich die Indizes dieser Suchwerte im Master-Array erzeugen.Suchen Sie Indizes einer Liste von Werten in einem nupy Array

Beispiel: Master-Array [1,2,3,4,5], Such-Array ist [4,2,2,3]

Lösung: [3,1,1,2]

Gibt es eine "native" numpy-Funktion, die das effizient macht (dh mit C-Geschwindigkeit statt mit Python-Geschwindigkeit)?

Ich bin mir der folgenden Lösung bewusst, aber erstens ist es ein Python-Listenverständnis, und zweitens wird es zweimal nach dem Index von 2 suchen.

ma = np.array([1,2,3,4,5]) 
sl = np.array([4,2,2,3]) 
ans = [np.where(ma==i) for i in sl] 

Auch, wenn ich zu sortieren und binäre Suche zurückgreifen müssen, ich habe es als letztes tun (puns nicht auf allen möglichen Ebenen bestimmt sind). Ich bin daran interessiert herauszufinden, ob ich etwas Grundlegendes aus der numpligen Bibliothek verpasse. Diese Listen sind sehr groß, so dass die Leistung im Vordergrund steht.

Danke.

Edit: Vor der Veröffentlichung würde ich folgende mit trüben Ergebnissen versucht:

[np.searchsorted(ma,x) for x in sl] 

Die Lösung von @pierre geschrieben ist viel mehr performant und genau das, was ich suchte.

Antwort

14

Würde np.searchsorted für Sie arbeiten?

>>> master = np.array([1,2,3,4,5]) 
>>> search = np.array([4,2,2,3]) 
>>> np.searchsorted(master, search) 
array([3, 1, 1, 2]) 
+0

Absolut! Habe gerade deinen Code fertiggestellt und es funktioniert super. Bearbeite meine Frage, um Ergebnisse zu posten. – Fenchurch

Verwandte Themen