Python OSMNX图形到距离矩阵和DBSCAN
我在编程从坐标图(LAT,LON)获取距离矩阵时遇到问题 我想连接任意一组点(比如说,200.000家公司),在图中获得它们最接近的表示,用Python OSMNX图形到距离矩阵和DBSCAN,python,parallel-processing,networkx,dbscan,osmnx,Python,Parallel Processing,Networkx,Dbscan,Osmnx,我在编程从坐标图(LAT,LON)获取距离矩阵时遇到问题 我想连接任意一组点(比如说,200.000家公司),在图中获得它们最接近的表示,用ox.Graph\u from\u place()创建 我正在使用dask数组和数据帧(da.array,df.DataFrame) 一些代码被避免进入问题的核心,然后,我尝试使用强连通图Gs,使用network\u distance\u matrix()函数,但这在计算时间上非常低效。我已经在一系列函数中看到了,但是我还没有看到一个函数能够有效地计算属于图
ox.Graph\u from\u place()
创建
我正在使用dask
数组和数据帧(da.array
,df.DataFrame
)
一些代码被避免进入问题的核心,然后,我尝试使用强连通图Gs
,使用network\u distance\u matrix()
函数,但这在计算时间上非常低效。我已经在一系列函数中看到了,但是我还没有看到一个函数能够有效地计算属于图的一对唯一节点之间的距离矩阵,并跟踪通过图的路径
我想知道是否有任何方法可以并行化这个过程,和/或使它以生成的方式进行,而不是存储所有的RAM
我的目标是在DBSCAN(
sklearn.clustering
)模型中提供一个预先计算的矩阵,它必须快速,以便我可以通过参数进行某种“网格搜索”。我是这些库的初学者。@user366197速度提升与您的初始机器代码和源代码有关,因此,如果您达到1.5倍,我也会达到。只是我需要知道是否有办法加快这个过程,如果需要,我会添加资源。我不知道预期的提升,因为由于内存问题,我还没有完成一次计算。有些想法?@user366197速度提升与您的初始机器代码和源代码有关,因此,如果您达到1.5倍,我也会达到。只是我需要知道是否有办法加快这个过程,如果需要,我会添加资源。我不知道预期的提升,因为由于内存问题,我还没有完成一次计算。一些想法?
if __name__ == "__main__":
# OPTION B: Use a strongly (instead of weakly) connected graph
Gs = ox.utils_graph.get_largest_component(G, strongly=True)
Gs.__name__ = "Gs"
# attach nearest network node to each firm
df["nn"] = da.array(ox.get_nearest_nodes(Gs, X=df['longitude'], Y=df['latitude'], method='balltree') )
# we'll get distances for each pair of nodes that have firms attached to them
nodes_unique = pd.Series(df['nn'].unique())
nodes_unique.index = nodes_unique.values
# convert MultiDiGraph to DiGraph for simpler faster distance matrix computation
G_dm = nx.DiGraph(Gs)
G_dm.__name__ = "G_dm"
save_pickle(Gs)
save_pickle(G_dm)
print("len df['nn']:", len(df['nn']))
print("len nodes_unique:", len(nodes_unique))