Sto cercando di ottenere l'indice di tutti gli elementi ripetuti in un array numpy, ma la soluzione che ho trovato per il momento è DAVVERO inefficiente per un grande (> 20000 elementi) array di input (ci vogliono più o meno 9 secondi). L'idea è semplice:Ottieni un elenco di tutti gli indici di elementi ripetuti in un array numpy
records_array
è una matrice NumPy di timestamp (TimeDate) da cui vogliamo estrarre gli indici di timestamp ripetutetime_array
è un array NumPy contenente tutti i timestamp che sono ripetuto inrecords_array
records
è un QuerySet di django (che può essere facilmente convertito in un elenco) contenente alcuni oggetti Record. Vogliamo creare un elenco di coppie formate da tutte le possibili combinazioni di attributi tagId di Record corrispondenti ai timestamp ripetuti trovati darecords_array
.
Ecco il lavoro (ma inefficiente) codice che ho per il momento:
tag_couples = [];
for t in time_array:
users_inter = np.nonzero(records_array == t)[0] # Get all repeated timestamps in records_array for time t
l = [str(records[i].tagId) for i in users_inter] # Create a temporary list containing all tagIds recorded at time t
if l.count(l[0]) != len(l): #remove tuples formed by the first tag repeated
tag_couples +=[x for x in itertools.combinations(list(set(l)),2)] # Remove duplicates with list(set(l)) and append all possible couple combinations to tag_couples
Sono abbastanza sicuro che questo può essere ottimizzato utilizzando Numpy, ma non riesco a trovare un modo per confrontare records_array
con ogni elemento di time_array
senza utilizzare un ciclo for (questo non può essere confrontato utilizzando solo ==
, poiché sono entrambi gli array).
hai semplicemente bisogno di rimuovere gli oggetti record duplicati o hai bisogno di trovare dove sono nella tua lista? (se sì, quale duplicato vuoi? l'ultimo? il primo? – Matthew
@Matthew Ho bisogno di trovare gli indici di tutti i duplicati (o meglio ancora, direttamente il 'tagId'), diviso per il timestamp corrispondente. Per esempio supponiamo 'records_array = [1,2,3,1,1,3,4,3,2]', mi piacerebbe avere '[[0,3,4], [1,8], [2,5,7]] ' – morens