Могу ли я оптимизировать два цикла for, которые ищут ближайший почтовый индекс на основе широты и долготы?

Я новичок в Python, и у меня была задача найти почтовый индекс США на основе широты и долготы. После экспериментов с arcgis я понял, что это дает мне пустые значения для определенных мест. Я закончил кодирование чего-то, что выполняет мою задачу, взяв набор данных, содержащий все коды США, и используя евклидово расстояние, чтобы определить ближайший почтовый индекс на основе их широты / долготы. Однако в среднем это занимает около 1,3 секунды, чтобы вычислить, что для моих почти миллиона записей потребует времени, так как для каждой записи потребуется почтовый индекс. Я смотрел, что векторизация — это вещь на Python для ускорения задач. Но я не могу найти способ применить это к моему коду. Вот мой код, и мы будем благодарны за любые отзывы:

for j in range(len(myFile)):
    p1=0
    p1=0
    point1 = np.array((myFile["Latitude"][j], myFile["Longitude"][j]))  # This is the reference point
    i = 0
    resultZip = str(usZips["Zip"][0])
    dist = np.linalg.norm(point1 - np.array((float(usZips["Latitude"][0]), float(usZips["Longitude"][0]))))
    for i in range(0, len(usZips)):
        lat = float(usZips["Latitude"][i])
        lon = float(usZips["Longitude"][i])
        point2 = np.array((lat, lon))  # This will serve as the comparison from the dataset
        temp = np.linalg.norm(point1 - point2)
        if (temp <= dist):  # IF the temp euclidean distance is lower than the alread set it will:
            dist = temp  # set the new distance to temp and...
            resultZip = str(usZips["Zip"][i])  # will save the zip that has the same index as the new temp
            # p1=float(myFile["Latitude"][58435])
            # p2=float(myFile["Longitude"][58435])
        i += 1

Я знаю, что у Google также есть API обратного геокодирования, но у него есть ограничение на количество запросов в день. Файл с названием myFile представляет собой CSV-файл с атрибутами userId, latitude, longitude, timestamp с примерно миллионом записей. Файл usZips — это общедоступный набор данных с информацией о городе, широте, долготе, почтовом индексе и часовом поясе, содержащий около 43 тыс. Записей почтовых индексов по США.

0

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *