Функция применения содержит внешнюю библиотеку в пандах: как сделать это быстрее? - PullRequest
0 голосов
/ 16 марта 2019

У меня есть фрейм данных, где количество строк составляет около 9 миллионов строк, содержат широту и долготу следующим образом:

enter image description here

и я попытался получить ближайший узел и расстояние до ближайшего узла для каждой точки с помощью библиотеки OSMnx, применив следующий код:

def nearest_node(Lat,Lon):
    nearest_node,dist=ox.get_nearest_node(G, (Lat,Lon), return_dist=True)  
    return nearest_node 
def dist_to_Nnode(Lat,Lon):
    nearest_node,dist=ox.get_nearest_node(G, (Lat,Lon), return_dist=True)
    return dist 


df['nearest_node'] = np.vectorize(nearest_node)(df['Lat'],df['Lon'])

df['dist_to_Nnode'] = np.vectorize(dist_to_Nnode)(df['Lat'],df['Lon'])

где G - сетевой график, полученный по следующей кодовой строке:

import osmnx as ox 
import networkx as nx
import os 


os.environ["PROJ_LIB"] =r'C:\Users\****\Anaconda3\Library\share'
import osmnx as ox
Graph_x= ox.graph_from_place('Beijing, China',  which_result=2)
G= ox.project_graph(Graph_x,to_crs={'proj':'longlat','epsg':'32750' ,'ellps':'WGS84', 'datum':'WGS84'}) #wgs 84 50S

Я применил предыдущий код к образцу df, где он уже дал желаемый результат, но он потратил много времени на общую сумму df. Как запустить этот код быстрее ??

1 Ответ

1 голос
/ 16 марта 2019

Согласно документации OSMnx , используйте ox.get_nearest_nodes(G, X, Y, method='kdtree'), где G - ваш спроецированный график, а X и Y - векторы ваших спроецированных координат x и y.В качестве альтернативы, если вы должны работать полностью в непрогнозируемом широковещательном режиме, используйте method='balltree'.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...