Как вычислить "ближайшие" узлы с помощью networkx

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

Учитывая график G и начальный node 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.

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

Ответ 2

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

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

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