Ich habe eine Liste von Daten, master_time
. Für jedes Datum in master_time
suche ich nach dem nächsten Treffer in vier anderen Datumslisten; time1
, time2
, time3
und time4
. Die Ergebnisse werden an "engmatchmatch" -Listen angefügt, die später verwendet werden, um Datenrahmen zu verbinden, die Zeitreiheninformationen aus verschiedenen Datenquellen enthalten. (Vielleicht gibt es eine bessere Annäherung an das ursprüngliche Problem, aber das ist, was ich mit so weit gekommen sind)So beschleunigen Sie das: Suchen Sie in mehreren Datumslisten nach der besten Übereinstimmung. [Python]
durch die 4-Listen zu suchen, ich habe folgende (ziemlich sperrig) Schleife erstellt:
master_time = [some list of dates...]
time1 = [some other list of dates...]
time2 = [some other list of dates...]
time3 = [some other list of dates...]
time4 = [some other list of dates...]
closest2=[];closest4=[];closest5=[];closest6=[]
for i in master_time:
index_time=i
closestTimestamp1=min(time1, key=lambda d: abs(d - index_time))
closestTimestamp2=min(time2, key=lambda d: abs(d - index_time))
closestTimestamp3=min(time3, key=lambda d: abs(d - index_time))
closestTimestamp4=min(time4, key=lambda d: abs(d - index_time))
closest1.append(str(closestTimestamp1))
closest2.append(str(closestTimestamp2))
closest3.append(str(closestTimestamp3))
closest4.append(str(closestTimestamp4))
print str(i)
Diese Schleife dauert ~ 5 Sekunden pro Iteration (dh viel zu langsam). Ich bin ziemlich neu bei Python im Allgemeinen, also vermute ich, dass es einige Möglichkeiten gibt, wie ich das rationalisieren kann, um es schneller zu machen. Irgendwelche Vorschläge werden sehr geschätzt!
In Anbetracht der Tatsache, dass Sie jede der Zeitlisten mehrmals durchsuchen, warum sortieren Sie nicht alle Zeitlisten und dann eine binäre Suche? Das würde die zeitliche Komplexität Ihres Algorithmus erheblich reduzieren. – James
@James Toller Tipp - Ich habe es noch nicht ganz richtig gemacht, aber es scheint schon schneller. Vielen Dank! – user5503831