2013-06-25 3 views
10

Что я ищу здесь, вполне может быть встроенной функцией в networkx и иметь математическое имя - если это так, я хотел бы знать, что это такое! Кажется, это очень сложно для Google.Как вычислить «близлежащие» узлы с помощью networkx

Учитывая график G и начальный узел i, я хотел бы найти подграф всех узлов «в пределах P краев» от i - то есть, те, которые связаны с i по пути менее чем P кромки.

Мой проект реализации для этого:

import networkx as nx 

N = 30 
G = nx.Graph() 

# populate the graph... 
G.add_cycle(range(N)) 

# the starting node: 
i = 15 

# the 'distance' limit: 
P = 4 

neighborhood = [i] 
new_neighbors = [i] 
depth = 0 

while depth < P: 
    new_neighbors = list(set(sum([ 
     [k for k in G[j].keys() if k not in neighborhood] 
    for j in new_neighbors], []))) 

    neighborhood.extend(new_neighbors) 

    depth += 1 

Gneighbors = G.subgraph(neighborhood) 

Этот код работает, кстати, так что я не нужна помощь в реализации. Я просто хотел бы знать, имеет ли это имя, и предоставлена ​​ли она библиотекой networkx.

Это очень полезно, когда ваш код падает, и вы хотите понять, почему - вы можете отобразить только «локальность/область» графика рядом с проблемным узлом.

ответ

9

Использование single_source_shortest_path или single_source_shortest_path_length с обрезанием p

Что-то вроде:

nx.single_source_shortest_path_length(G ,source=i, cutoff=p) 
+1

Спасибо, на самом деле это выглядит как nx.single_source_shortest_path_length будет лучше, так как это возвращает меньше данных (я предполагаю, что это также делает меньше работы). Но да, это наименьший код для написания/поддержки, спасибо! – tehwalrus

17

Два года поздно, но я искал эту же вещь и нашли встроенный, что я думаю, получит подграф, который вы хотите: ego_graph. Функции подпись и документация:

ego_graph(G, n, radius=1, center=True, undirected=False, distance=None) 

Возвращает индуцированный подграф соседей, центрированных на узле п в пределах заданного радиуса.

+0

Действительно полезный материал! +1 – FaCoffee

Смежные вопросы