使用Python Networkx计算节点之间的距离

3

我是NetworkX的新手,我需要找到两个节点之间的距离。我已经尝试过了,但是大多数搜索结果都涉及DFSDijkstra等方法,这不是我想要的。我只想知道两组坐标之间的欧几里得距离,其中后者表示图中的节点。


底层图形与您要计算的距离有关吗?例如,用于选择点吗?如果不是,那么您肯定只需要计算您感兴趣的坐标对(p1,p2)((p1.x-p2.x)**2 + (p1.y-p2.y)**2 + (p1.z-p2.z)**2)**0.5即可。 - Bonlenfum
1个回答

4
您可以很容易地做到这一点,正如上面的评论所指出的那样。您需要做的就是在迭代您图形中的所有节点的 for 循环 中实现欧几里得距离公式。技术上下面的代码片段重点关注边缘,但它们的长度恰好是您要寻找的:节点A和节点B(起始点和终点)之间的距离。

如果您需要运行进一步的分析,例如计算边缘长度分布,则可以将结果保存在字典中。

import networkx as nx
import math

#Create a test graph
m=2  #Number of initial links
n=100 #Number of nodes
ncols=10 #Number of columns in a 10x10 grid of positions
G=nx.barabasi_albert_graph(n, m, j)
pos = {i : (i // ncols, (n-i-1) % ncols) for i in G.nodes()}

#Compute the node-to-node distances
lengths={}
for edge in G.edges():
   startnode=edge[0] 
   endnode=edge[1]
   lengths[edge]=round(math.sqrt(((pos[endnode][1]-pos[startnode][1])**2)+
                                      ((pos[endnode][0]-pos[startnode][0])**2)),2) #The distance

如果您想计算边缘长度分布,可以使用以下代码:
import pandas as pd

items=sorted(lengths.items())
values=lengths.values()
df = pd.DataFrame({'Lengths':values})

df['Lengths'].hist(df, bins=10) #Change to as many bins as you want/need

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接