当前位置: 首页 > 面试题库 >

合并(加入)networkx图

郭元凯
2023-03-14
问题内容

假设我有两个networkx图,G并且H

G=nx.Graph()
fromnodes=[0,1,1,1,1,1,2]
tonodes=[1,2,3,4,5,6,7]
for x,y in zip(fromnodes,tonodes):
    G.add_edge(x,y)

H=nx.Graph()
fromnodes=range(2,8)
tonodes=range(8,14)
for x,y in zip(fromnodes,tonodes):
    H.add_edge(x,y)

联接两个networkx图的最佳方法是什么?

我想保留节点名称(注意公共节点2到7)。当我使用时nx.disjoint_union(G,H),这没有发生:

>>> G.nodes()
[0, 1, 2, 3, 4, 5, 6, 7]
>>> H.nodes()
[2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]
>>> Un= nx.disjoint_union(G,H)
>>> Un.nodes()
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
#

H节点标签被改变(不是我想要的)。我想在具有相同编号的节点处加入图。

注意。 这不是NetworkX中“合并两个加权图”的重复项


问题答案:

您要查找的函数是compose,该函数将生成一个图形,其中包含两个图形中的所有边缘和所有节点。如果两个图都有一个具有相同名称的节点,则单个副本将最终出现在新图中。如果两者都存在相同的边,则类似。这是一个示例,其中包括edge
/ node属性:

import networkx as nx

G=nx.Graph()
G.add_node(1, weight = 2)
G.add_node(2, weight = 3)
G.add_edge(1,2, flux = 5)
G.add_edge(2,4)

H=nx.Graph()
H.add_node(1, weight = 4)
H.add_edge(1,2, flux = 10)
H.add_edge(1,3)

F = nx.compose(G,H)
#F has all nodes & edges of both graphs, including attributes
#Where the attributes conflict, it uses the attributes of H.

G.nodes(data=True)
> NodeDataView({1: {'weight': 2}, 2: {'weight': 3}, 4: {}})
H.nodes(data=True)
> NodeDataView({1: {'weight': 4}, 2: {}, 3: {}})
F.nodes(data=True)
> NodeDataView({1: {'weight': 4}, 2: {'weight': 3}, 4: {}, 3: {}})

G.edges(data=True)
> EdgeDataView([(1, 2, {'flux': 5}), (2, 4, {})])
H.edges(data=True)
> EdgeDataView([(1, 2, {'flux': 10}), (1, 3, {})])
F.edges(data=True)
EdgeDataView([(1, 2, {'flux': 10}), (1, 3, {}), (2, 4, {})])

这些保留属性,但是显然如果发生冲突,则不可能。H优先级的属性。

还有其他选择可做对称差异,相交,…

如果您有多个图形要连接在一起,则可以使用compose_all,只需将for循环环绕compose



 类似资料:
  • 问题内容: 我在加入熊猫方面遇到问题,并且试图找出问题所在。假设我有一个x: 我应该能够通过简单的连接命令在y = x上将y与索引上的y联接,除了同名具有+2。 我希望决赛对双方都有1941个非值。我也尝试过合并,但是我有同样的问题。 我以为正确的答案是pandas.concat([x,y]),但这也不符合我的预期。 编辑:如果您在加入方面遇到问题,请阅读下面的韦斯答案。我有一个重复的时间戳。 问

  • NetworkX是一个用Python语言开发的图论与复杂网络建模工具,内置了常用的图与复杂网络分析算法,可以方便的进行复杂网络数据分析、仿真建模等工作。 示例代码: >>> import networkx as nx>>> G=nx.Graph()>>> G.add_node("spam")>>> G.add_edge(1,2)>>> print(G.nodes())[1, 2, 'spam']>

  • 问题内容: 我想对具有日期时间索引的数据框执行联接/合并/追加操作。 假设我有,我想添加它。 可以具有更少或更多的列,并且索引重叠。对于索引匹配的所有行,如果具有与相同的列,我希望使用的值覆盖的值。 如何获得理想的结果? 问题答案: 如何:? 请注意,它从不与重叠的索引中获取值。如果这不能完全满足您的要求,我将愿意改进此功能/为其添加选项。

  • 问题内容: 假设我有两个这样的DataFrame: 我想合并它们,所以我尝试这样的事情: 我很开心 但是我正在尝试使用join方法,我被认为这是非常相似的。 我得到这个: 我想念什么? 问题答案: 我总是在索引上使用: 通过在以下各列上使用,可以具有相同的功能:

  • 问题内容: MessageDigest =>根据需要频繁创建新实例 KeyFactory =>使用单个共享实例 SecureRandom =>使用StackObjectPool 密码=>使用StackObjectPool 题 在对安全 框架 进行编码时,我经常遇到两难的问题:“ 合并还是不合并” 基本上,这个问题分为两个“组”: 第1组:因为对的调用是同步的,并且可能成为WebApp /多线程应用

  • 我已经解决了如何合并两个XML文件并修改匹配的属性。 我现在正在努力解决如果file1中不存在file2节点,如何添加file2节点(基于属性名) 这是我拥有的xsl文件: 我找到了如何使用XSLT合并两个xml文件,但无法解决如何将提议解决方案应用于我的xsl。有人能帮忙吗?