2014-10-11 67 views
1

我是NetworkX的新手,我需要找到两个节点之间的距离。我已经给它一个去,但大多数搜索导致DFSDijkstra等方法,这不是我的观点。我只想要两组坐标之间的欧几里得距离,后者代表图中的节点。使用python网络的节点之间的距离x

+0

是否底层的图有什么关系,你要计算的距离?例如。选择积分?如果不是,那么你只需要计算'((p1.x-p2.x)** 2 +(p1.y-p2.y)** 2 +(p1.z-p2.z)** 2) ** 0.5'作为你感兴趣的坐标对'(p1,p2)'? – Bonlenfum 2014-10-12 20:20:26

+0

谢谢,让我试试看。 – Amanda 2014-10-13 12:17:58

回答

0

你可以很容易地做到这一点,正如上面的评论指出的那样。您只需在for loop的内部实现Euclidean distance formula即可遍历图形中的所有节点。从技术上讲,下面的代码片段集中在edges上,但它们的长度正是你正在寻找的:节点A和节点B之间的距离(开始和终点)。

如果您需要运行进一步分析(如计算边长分布),则可以将结果保存在dictionary中。

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