Ho due matrici, a1 e a2. Si assuma len(a2) >> len(a1)
e che a1 sia un sottoinsieme di a2.Restituisce indici di elementi comuni tra due array numpy
Vorrei un modo rapido per restituire gli indici a2 di tutti gli elementi in a1. Il modo più intenso per farlo è ovviamente:
from operator import indexOf
indices = []
for i in a1:
indices.append(indexOf(a2,i))
Questo ovviamente richiede molto tempo quando a2 è grande. Potrei anche usare numpy.where() (anche se ogni voce in a1 apparirà solo una volta in a2), ma non sono convinto che sarà più veloce. Potrei anche attraversare la vasta gamma solo una volta:
for i in xrange(len(a2)):
if a2[i] in a1:
indices.append(i)
Ma sono sicuro che ci sia un modo più veloce e 'NumPy' - Ho guardato l'elenco metodo NumPy, ma non riesco a trovare nulla appropriata.
Molte grazie in anticipo,
D
Ho confrontato la tua soluzione con quella di Dave Kirby di cui sopra, con questo a circa 1.35X più veloce per len (a2) == 12347424, len (a1) == 1338, quindi questa soluzione è il mio voto - grazie! – Dave
Per chi legge questo: sembra che 'setmember1d' sia stato rinominato in' in1d' da numpy 1.4. –
@AlokSinghal Grazie per averlo preso! –