【问题标题】:Does networkx give maximum depth (or nesting depth)?networkx 是否提供最大深度(或嵌套深度)?
【发布时间】:2018-10-25 21:04:04
【问题描述】:

我正在使用 networkx 为项目构建图表。对于特定的绘图,我需要每个节点的最大深度(或嵌套深度)(类似于 this)。

例如。

我的图表中有多个节点,比如说-

G -> d, foo, bar, tar, zar, car, char, jar, par, radar, far, ....

d 与其他人有这样的联系,

d -> {'foo': {'bar': {'tar': 2}, 'zar': {'car': {'char': 1}, 'jar': 'par'}}, 'radar': 'far'}

我想要节点的最大深度(或连接性)。

所以,在这种情况下 - d->foo->zar->car->char(共5个节点)

有什么方法可以使用 networkx 来计算(我有超过 100 万个节点,所以数据很大!)?

我查看了他们的手册here

也在网上查了不同的帖子,但找不到信息。

【问题讨论】:

标签: python networkx graph-theory depth-first-search depth


【解决方案1】:

不,他们没有。

所以,我编辑了他们的 github 代码以添加此功能。

代码:

max_d = []

#dfs_depth base Code reference networkx

def dfs_depth(G, source=None, depth_limit=None): if source is None: nodes = G else: nodes = [source] visited = set() if depth_limit is None: depth_limit = len(G) for start in nodes: print(start) if start in visited: continue max_depth = 0 visited.add(start) stack = [(start, depth_limit, iter(G[start]))] while stack: parent, depth_now, children = stack[-1] try: child = next(children) if child not in visited: yield parent, child visited.add(child) if depth_now > 1: if((depth_limit - depth_now + 1)>max_depth): max_depth = depth_limit - depth_now + 1 stack.append((child, depth_now - 1, iter(G[child]))) except StopIteration: stack.pop() global max_d max_d.append(max_depth)

这里max_d 跟踪最大深度(或嵌套深度)。要计算每个节点的最大深度,可以使用循环(遍历所有节点)。

【讨论】:

    猜你喜欢
    • 2018-04-14
    • 1970-01-01
    • 2011-08-27
    • 1970-01-01
    • 2020-08-12
    • 1970-01-01
    • 1970-01-01
    • 2012-08-29
    相关资源
    最近更新 更多