1
我是NetworkX
的新手,我需要找到兩個節點之間的距離。我已經給它一個去,但大多數搜索導致DFS
,Dijkstra
等方法,這不是我的觀點。我只想要兩組座標之間的歐幾里得距離,後者代表圖中的節點。使用python網絡的節點之間的距離x
我是NetworkX
的新手,我需要找到兩個節點之間的距離。我已經給它一個去,但大多數搜索導致DFS
,Dijkstra
等方法,這不是我的觀點。我只想要兩組座標之間的歐幾里得距離,後者代表圖中的節點。使用python網絡的節點之間的距離x
你可以很容易地做到這一點,正如上面的評論指出的那樣。您只需在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
是否底層的圖有什麼關係,你要計算的距離?例如。選擇積分?如果不是,那麼你只需要計算'((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
謝謝,讓我試試看。 – Amanda 2014-10-13 12:17:58