【问题标题】:Adding weights to MultiDiGraph edges向 MultiDiGraph 边添加权重
【发布时间】:2014-07-17 17:27:28
【问题描述】:

我有一个多向图,其中的边没有权重。我想添加一些权重

G=MultiDiGraph():

......

  for u, v, data in G.edges_iter(data=True):
     G.edge[u][v]['weight'] = None

我得到以下边缘:

('08B', '09B', {}),
('08B', '09B', {}),
('08B', '09B', {}),
('08B', '09B', 1),
('03P', '05T', {}),
('03P', '05T', 1)]

也就是说,它仅在一个实例中添加权重。如何为所有边添加权重?

【问题讨论】:

    标签: python networkx


    【解决方案1】:

    您遇到的问题是您在多图中使用附加字典访问边的属性。特别是,每条边都有一个 copies 字典,因此您可以按如下方式访问给定边的属性:

    G.edge[u][v][replicate][attr] = val
    

    因此,如果您想在一对 (u, v) 节点之间更新 all 的属性,您可以定义如下函数:

    def set_multi_edge_attr(u, v, attr, val):
        for repl in G.edge[u][v].keys():
           G.edge[u][v][repl][attr] = val
    

    其中repl 表示单个边的副本。这是一个简单的例子:

    >>> import networkx as nx
    >>> G = nx.MultiDiGraph()
    >>> G.add_edges_from([(0, 1), (0, 1), (0, 1)])
    >>> G.edges(data=True)
    [(0, 1, {}), (0, 1, {}), (0, 1, {})]
    >>> set_multi_edge_attr(0, 1, 'weight', 1)
    >>> G.edges(data=True)
    [(0, 1, {'weight': 1}), (0, 1, {'weight': 1}), (0, 1, {'weight': 1})]
    

    【讨论】:

      猜你喜欢
      • 2011-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-23
      • 2017-09-24
      • 1970-01-01
      相关资源
      最近更新 更多