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