Python 3.x 使用python networkx的节点之间的距离

Python 3.x 使用python networkx的节点之间的距离,python-3.x,graph,nodes,networkx,euclidean-distance,Python 3.x,Graph,Nodes,Networkx,Euclidean Distance,我是NetworkX的新手,需要找到两个节点之间的距离。我已经尝试过了,但大多数搜索都会导致DFS,Dijkstra等方法,这不是我的重点。我只想要两组坐标之间的欧几里德距离,后者表示图中的节点。正如上面的评论所指出的,你可以很容易地做到这一点。您所需要做的就是在一个迭代图中所有节点的for循环内部实现。从技术上讲,下面的代码片段主要关注边,但它们的长度正是您要查找的:节点A和节点B(起点和终点)之间的距离 如果需要运行进一步的分析,例如计算边长度分布,则可以将结果保存在字典中 import n

我是NetworkX的新手,需要找到两个节点之间的距离。我已经尝试过了,但大多数搜索都会导致
DFS
Dijkstra
等方法,这不是我的重点。我只想要两组坐标之间的欧几里德距离,后者表示图中的节点。

正如上面的评论所指出的,你可以很容易地做到这一点。您所需要做的就是在一个迭代图中所有节点的
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

底层图形是否与要计算的距离有关?例如,用于选择点?如果没有,那么您肯定只需要为您感兴趣的坐标对计算
((p1.x-p2.x)**2+(p1.y-p2.y)**2+(p1.z-p2.z)**2)**0.5
(p1,p2)
?谢谢,让我试试。