如何使用networkx计算“附近”节点

时间:2013-06-25 15:49:50

标签: python math networkx

我在这里寻找的可能是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库提供。

当您的代码崩溃并且您想知道原因时,它非常有用 - 您只能在问题节点附近呈现图形的“位置/区域”。

2 个答案:

答案 0 :(得分:20)

迟了两年,但我一直在寻找同样的东西,并找到了一个内置的,我认为会得到你想要的子图:ego_graph。功能签名和文档:

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

返回给定半径内以节点n为中心的邻居的诱导子图。

答案 1 :(得分:11)

使用截止值为p

single_source_shortest_pathsingle_source_shortest_path_length

类似的东西:

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