У меня есть один список дат, master_time
. Для каждой даты в master_time
, я ищу ближайший матч в четырех других списках дат; time1
, time2
, time3
, и time4
. Результаты добавляются в списки «closestmatch», которые позже будут использоваться для объединения данных, содержащих информацию о таймсерах из разных источников данных. (Может быть, есть лучший подход к исходной задаче, но это то, что я придумал до сих пор)Как ускорить это: поиск по нескольким спискам дат для поиска ближайшего соответствия. [Python]
Для поиска в 4 списков, я создал следующий (довольно громоздкий) цикл:
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)
Этот цикл занимает ~ 5 секунд на итерацию (т.е. слишком медленный). Я довольно новичок в Python в целом, поэтому я подозреваю, что есть несколько способов упростить это, чтобы сделать его быстрее. Любые предложения приветствуются!
Учитывая, что вы просматриваете каждый из списков времени несколько раз, почему бы вам не отсортировать все списки времени, а затем выполнить двоичный поиск? Это значительно сократит временную сложность вашего алгоритма. – James
@James Большой совет - я еще не получил его полностью, но он уже кажется более быстрым. Благодаря! – user5503831