当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python NetworkX MultiDiGraph.update用法及代码示例


本文简要介绍 networkx.MultiDiGraph.update 的用法。

用法:

MultiDiGraph.update(edges=None, nodes=None)

使用节点/边/图形作为输入来更新图形。

与 dict.update 一样,此方法将图作为输入,将图的节点和边添加到该图中。它也可以有两个输入:边和节点。最后,它可以采用边或节点。要仅指定节点,必须使用关键字 nodes

边和节点的集合的处理方式与add_edges_from/add_nodes_from 方法类似。迭代时,它们应该产生 2 元组 (u, v) 或 3 元组 (u, v, datadict)。

参数

edges图形对象、边的集合或无

第一个参数可以是图或一些边。如果它具有属性 nodes edges ,则将其视为 Graph-like 对象,并且这些属性用作要添加到图中的节点和边的集合。如果第一个参数没有这些属性,则将其视为边的集合并添加到图中。如果第一个参数为 None,则不添加边。

nodes节点集合,或无

第二个参数被视为要添加到图中的节点集合,除非它是 None。如果 edges is Nonenodes is None 会引发异常。如果第一个参数是 Graph,则忽略 nodes

注意

如果您想使用邻接结构更新图形,则可以直接从邻接中获取边/节点。以下示例提供了常见情况,您的邻接可能略有不同,需要对这些示例进行调整:

>>> # dict-of-set/list/tuple
>>> adj = {1: {2, 3}, 2: {1, 3}, 3: {1, 2}}
>>> e = [(u, v) for u, nbrs in adj.items() for v in nbrs]
>>> G.update(edges=e, nodes=adj)
>>> DG = nx.DiGraph()
>>> # dict-of-dict-of-attribute
>>> adj = {1: {2: 1.3, 3: 0.7}, 2: {1: 1.4}, 3: {1: 0.7}}
>>> e = [
...     (u, v, {"weight": d})
...     for u, nbrs in adj.items()
...     for v, d in nbrs.items()
... ]
>>> DG.update(edges=e, nodes=adj)
>>> # dict-of-dict-of-dict
>>> adj = {1: {2: {"weight": 1.3}, 3: {"color": 0.7, "weight": 1.2}}}
>>> e = [
...     (u, v, {"weight": d})
...     for u, nbrs in adj.items()
...     for v, d in nbrs.items()
... ]
>>> DG.update(edges=e, nodes=adj)
>>> # predecessor adjacency (dict-of-set)
>>> pred = {1: {2, 3}, 2: {3}, 3: {3}}
>>> e = [(v, u) for u, nbrs in pred.items() for v in nbrs]
>>> # MultiGraph dict-of-dict-of-dict-of-attribute
>>> MDG = nx.MultiDiGraph()
>>> adj = {
...     1: {2: {0: {"weight": 1.3}, 1: {"weight": 1.2}}},
...     3: {2: {0: {"weight": 0.7}}},
... }
>>> e = [
...     (u, v, ekey, d)
...     for u, nbrs in adj.items()
...     for v, keydict in nbrs.items()
...     for ekey, d in keydict.items()
... ]
>>> MDG.update(edges=e)

例子

>>> G = nx.path_graph(5)
>>> G.update(nx.complete_graph(range(4, 10)))
>>> from itertools import combinations
>>> edges = (
...     (u, v, {"power": u * v})
...     for u, v in combinations(range(10, 20), 2)
...     if u * v < 225
... )
>>> nodes = [1000]  # for singleton, use a container
>>> G.update(edges, nodes)

相关用法


注:本文由纯净天空筛选整理自networkx.org大神的英文原创作品 networkx.MultiDiGraph.update。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。