2016-07-23 12 views
2

Ich habe ein scheinbar einfaches Problem, das ich nicht lösen kann, ohne eine Schleife zu machen. (I mit sehr großen Arrays zu tun habe)Ersetzen von Werten in einem Array/Liste nach Index eines anderen Arrays/Liste

Lets der Einfachheit halber sagen, dass ich eine sortierte Array und eine unsortierte Array von einer anderen Dimension wie: x = np.array ([511512513]) und y = np.array ([512,512,513,511,511]). Ich möchte eine schnelle Funktion, die y durch die Indexpositionen ersetzt, die im sortierten min bis max Array x angegeben sind. Antwort sollte ausgegeben werden = np.array ([1,1,2,0,0])

Ich würde gerne in der Lage sein, dies in ein oder zwei Schritten zu tun. Jede Hilfe wäre dankbar, danke

+0

sortierten Array konvertieren, so dass der Index der Wert und Wert ist die Position. d. h. '[511 => 0, 512 => 1, 513 => 2]' Das Nachschlagen aus dem unsortierten Array erfolgt schnell, wenn Sie im 'sortierten Array' nach Schlüssel suchen. –

+1

Danke das hat funktioniert. Das habe ich benutzt: dictionary = dict (zip (x, z)) wobei z das Indexarray [0,1,2] war. Dann ein Listenverständnis l = [dicitonary [i] für i in unsortierter Liste]. Mucho schnell. – Canuck

Antwort

1

searchsorted() tut genau das, was Sie wollen: (? Hashmap)

import numpy as np 

x=np.array([511,512,513]) 
y=np.array([512,512,513,511,511]) 
np.searchsorted(x, y) # array([1, 1, 2, 0, 0])