2017-01-09 3 views
0

From the docskönnen wir aus der einzigartigen Funktion von numpy ein argsort-Array ableiten?

Liefert die sortierten einzigartigen Elemente eines Arrays. Zusätzlich zu den eindeutigen Elementen gibt es drei optionale Ausgaben: die Indizes des Eingabearrays, die die eindeutigen Werte angeben, die Indizes des eindeutigen Arrays, das das Eingabearray rekonstruiert, und die Anzahl, wie oft jeder eindeutige Wert im Eingabearray erscheint .

Daher muss numpy.unique einen Sortieralgorithmus ausführen. Gibt es eine Möglichkeit, die Sortierung aus den Ausgaben von numpy.unique abzuleiten. Anders gefragt, können wir die gleichen Ergebnisse einer argsort rein aus der Ausgabe von numpy.unique herleiten, also muss ich nicht zweimal sortieren.


Betrachten Arrays a und b als Abtastdaten.

import numpy as np 
from string import ascii_letters 

np.random.seed([3,1415]) 
n = 10000 
a = np.random.randint(100, size=n) 
b = np.random.choice(list(ascii_letters), n) 
+0

Würden Sie sich mit ganzen Zahlen beschäftigen? Gibt es doppelte Nummern im Array? – Divakar

+0

Ich denke an eine allgemeine Lösung, die nur die Ausgabe von "unique" liefert. Ich werde Beispieldaten in einer Minute veröffentlichen. – piRSquared

+0

@Divakar aktualisiert Beitrag – piRSquared

Antwort

0

Ich schrieb meine eigene einzigartige Funktion

def unique(a): 
    s = a.argsort() 
    a_ = a[s] 
    return a_[np.append(True, (a_[1:] != a_[:-1]))], s 

Timing
@hpaulj korrekt ist. Beachten Sie, dass meine benutzerdefinierte unique ist genauso schnell wie np.unique, wenn np.unique aufgefordert wird, eine inverse Array zurückzugeben. Andernfalls, wenn es nur unique Werte zurückgibt, ist es ein bisschen schneller.

enter image description here

Verwandte Themen