【问题标题】:Networkx get multiple depthsNetworkx 获得多个深度
【发布时间】:2019-11-27 00:27:10
【问题描述】:

我有一个包含多个有向亚克力图的 csv 文件。我正在尝试使用 networkx 来获取每个图的深度。但我不知道是否是我将所有图表作为一个导入的问题。如何导入多个 DAG 并计算每个连通图的最长路径?

我的 csv 文件有两列:源节点和目标节点。 格式是这样的; 源目标 1source target

source     target
 1           2
 1           3
 1           4
 4           5
 8           9
 9          10

这有两个 DAG:一个是 1 到 2、1 到 3、1 到 4 和 4 到 5。第二个图是 8 到 9 到 10。我想计算每个图的最长深度每个图中最长的宽度。

我的代码只能生成所有图表中深度最长的一个结果。但我希望它显示所有具有最长深度的单独图表。

我的代码如下:

import networkx as nx
import pandas as pd

df = pd.read_csv("importfile.csv")
g= nx.from_pandas_edgelist(df, source='source', target = ‘target’, creat_using = nx.DiGraph())
longes_depth = nx.algorithms.dag.dag_longest_path_length(g)
print(longest_depth)

【问题讨论】:

    标签: python-3.x networkx


    【解决方案1】:

    您可以先计算g 中的连通分量,然后遍历这些分量,在其组成节点上归纳出一个子图,然后计算每个子图的路径长度。

    longest_depths = []
    for component in nx.connected_components(g):
        subgraph = nx.subgraph(g, component)
        longest_depths.append(nx.algorithms.dag.dag_longest_path_length(subgraph))
    

    【讨论】:

    • 谢谢你,保罗,我认为这个想法对我来说很有意义,但我试过它给了我一个错误。问题是算法 connected_components() 只能应用于无向图,而我的是有向图,它表明“没有为有向类型实现”。我还在努力。谢谢!
    • 想必你在定义组件时并不关心方向性。所以你可以在我上面的回答中简单地调用nx.connected_components(g.to_undirected()) 而不是nx.connected_components(g)
    • 谢谢保罗!我真的很感激!
    • 我很高兴,并且:任何时候。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-16
    • 1970-01-01
    相关资源
    最近更新 更多