【问题标题】:networkx change weighted directed graph to undirectednetworkx 将加权有向图更改为无向图
【发布时间】:2019-05-16 21:55:03
【问题描述】:

networkx 中的内置函数是否可以将加权有向图更改为无向图?该功能应将两个有向边 (n1,n2,5) 和 (n2,n1,7) 更改为一个 (n1,n2,12)。

我找了很久,没有出钱。

【问题讨论】:

  • 如果您查看文档,您可以找到to_undirected()。但这仍然不能解决我认为的弧的总和。
  • 是的,我检查了这个功能,但在networkx中没有找到解决问题的内置功能。

标签: python graph networkx data-mining


【解决方案1】:

Networkx 有一个 to_undirected 函数,但它不会对权重求和,它只是用原始图中最后找到的边权重来更新权重:

如果图中存在两个方向(u,v)和(v,u)的边,则新的无向边的属性将是有向边属性的组合。边缘数据以遇到边缘的(任意)顺序更新。要对边缘属性进行更多自定义控制,请使用 add_edge()。

你应该像这样手动操作:

G = nx.DiGraph()
G.add_weighted_edges_from([
    (1,2,3),
    (1,3,4),
    (2,1,5),
    (2,3,1),
    (3,2,2)
])
UG = G.to_undirected()
for node in G:
    for ngbr in nx.neighbors(G, node):
        if node in nx.neighbors(G, ngbr):
            UG.edges[node, ngbr]['weight'] = (
                G.edges[node, ngbr]['weight'] + G.edges[ngbr, node]['weight']
            )
UG.edges.data('weight')

将返回汇总权重:

EdgeDataView([(1, 2, 8), (1, 3, 4), (2, 3, 3)])

【讨论】:

    猜你喜欢
    • 2019-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-10
    相关资源
    最近更新 更多