【问题标题】:how to compute 'nearby' nodes with networkx如何使用networkx计算“附近”节点
【发布时间】:2013-06-22 12:27:12
【问题描述】:

我在这里寻找的很可能是networkx 中的一个内置函数,并且有一个数学名称——如果是这样,我想知道它是什么! Google 似乎很难做到。

给定一个图G 和一个起始节点i,我想从i 中找到所有“在P 边内”的节点的子图——即那些连接到@ 的节点987654326@ 通过小于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 库提供。

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

【问题讨论】:

    标签: python math networkx


    【解决方案1】:

    使用single_source_shortest_pathsingle_source_shortest_path_lengthp 截止

    类似:

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

    【讨论】:

    • 谢谢,实际上看起来 nx.single_source_shortest_path_length 会更好,因为它返回的数据更少(我认为它的工作也更少)。但是,是的,这是编写/维护最少的代码,谢谢!
    【解决方案2】:

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

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

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

    【讨论】:

    • 真正有用的东西! +1
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多