Gruppieren von Indizes eindeutiger Elemente in Zahlen
Ich habe viele große (> 100.000.000) Listen mit ganzen Zahlen, die viele Duplikate enthalten. Ich möchte die Indizes erhalten, in denen jedes Element vorkommt. Momentan mache ich so etwas:
import numpy as np
from collections import defaultdict
a = np.array([1, 2, 6, 4, 2, 3, 2])
d=defaultdict(list)
for i,e in enumerate(a):
d[e].append(i)
d
defaultdict(<type 'list'>, {1: [0], 2: [1, 4, 6], 3: [5], 4: [3], 6: [2]})
Diese Methode zum Durchlaufen jedes Elements ist zeitaufwändig. Gibt es eine effiziente oder vektorisierte Möglichkeit, dies zu tun?
Edit1 Ich habe die Methoden von Acorbe und Jaime folgendermaßen ausprobiert
a = np.random.randint(2000, size=10000000)
Die Ergebnisse sind
original: 5.01767015457 secs
Acorbe: 6.11163902283 secs
Jaime: 3.79637312889 secs