compose#
- compose(G, H)[source]#
将图G和H组合成一个单一的图,合并节点和边。
节点集和边集不需要是互斥的。
组合操作保留节点和边的属性。H中的属性值优先于G中的属性值。
- Parameters:
- G, H图
一个NetworkX图
- Returns:
- C: 一个与G类型相同的新图
See also
Notes
建议G和H要么都是有向图,要么都是无向图。
对于MultiGraphs,边由相邻节点和边键标识。这可能导致意外情况(例如,边
(1, 2)
在两个图中可能相同也可能不同),如果你使用MultiGraph而不跟踪边键。如果不希望合并公共节点的属性,可以考虑使用union(),它在名称冲突时会引发异常。
Examples
>>> G = nx.Graph([(0, 1), (0, 2)]) >>> H = nx.Graph([(0, 1), (1, 2)]) >>> R = nx.compose(G, H) >>> R.nodes NodeView((0, 1, 2)) >>> R.edges EdgeView([(0, 1), (0, 2), (1, 2)])
默认情况下,
H
的属性优先于G
的属性。如果你希望以其他方式合并属性,可以在组合操作后更新它们:>>> G = nx.Graph([(0, 1, {"weight": 2.0}), (3, 0, {"weight": 100.0})]) >>> H = nx.Graph([(0, 1, {"weight": 10.0}), (1, 2, {"weight": -1.0})]) >>> nx.set_node_attributes(G, {0: "dark", 1: "light", 3: "black"}, name="color") >>> nx.set_node_attributes(H, {0: "green", 1: "orange", 2: "yellow"}, name="color") >>> GcomposeH = nx.compose(G, H)
通常,GcomposeH节点的颜色属性值来自H。我们可以通过以下方式解决这个问题:
>>> node_data = { ... n: G.nodes[n]["color"] + " " + H.nodes[n]["color"] ... for n in G.nodes & H.nodes ... } >>> nx.set_node_attributes(GcomposeH, node_data, "color") >>> print(GcomposeH.nodes[0]["color"]) dark green
>>> print(GcomposeH.nodes[3]["color"]) black
类似地,我们可以在组合操作后以我们喜欢的方式更新边属性:
>>> edge_data = { ... e: G.edges[e]["weight"] * H.edges[e]["weight"] for e in G.edges & H.edges ... } >>> nx.set_edge_attributes(GcomposeH, edge_data, "weight") >>> print(GcomposeH.edges[(0, 1)]["weight"]) 20.0
>>> print(GcomposeH.edges[(3, 0)]["weight"]) 100.0
Additional backends implement this function
graphblas : OpenMP-enabled sparse linear algebra backend.