2014-10-11 4 views
1

Я новичок в NetworkX, и мне нужно найти расстояние между двумя узлами. Я дал ему идти, но большинство поисков приводит к , Dijkstra и т. Д. Подходам, что не является моей точкой. Мне нужно только евклидово расстояние между двумя наборами координат, где последние представляют собой узлы на графике.Расстояние между узлами, использующими сеть pythonx

+0

ли базовый граф имеет ничего общего с расстояниями, которые вы хотите вычислить? Например. для выбора точек? Если нет, то вам просто нужно вычислить '((p1.x-p2.x) ** 2 + (p1.y-p2.y) ** 2 + (p1.z-p2.z) ** 2) ** 0.5' для пары координат '(p1, p2)', которую вы интересуете? – Bonlenfum

+0

Спасибо, позвольте мне попробовать. – Amanda

ответ

0

Вы можете сделать это очень легко, как указано выше. Все, что вам нужно сделать, это реализовать Euclidean distance formula внутри for loop, который выполняет итерацию по всем узлам вашего графика. Технически приведенный ниже фрагмент фокусируется на 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 
Смежные вопросы