2014-10-11 223 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