NetworkX 中的自我图

Ego Graph in NetworkX

我有一个二分图,其中包含节点(a1、a2、...a100、m1、m2、...)。我想找到某些节点(a1、a2 和 a10)的诱导子图。我可以通过使用 networkx.ego_graph 来做到这一点,但它一次需要一个顶点和 returns 导出图。我想知道是否有任何方法可以同时对我感兴趣的所有节点执行此操作,然后 select 最大的节点。

对于一般情况,可以使用nx.ego_graph获得自我图。

尽管在您的特定情况下,您似乎想要在网络中找到最大的诱导 ego graph。为此,您可以先找到具有最高 degree 的节点,然后获取其自我图。


让我们创建一个示例二分图:

import networkx as nx

B = nx.Graph()
B.add_nodes_from([1, 2, 3, 4, 5, 6], bipartite=0)
B.add_nodes_from(['a', 'b', 'c', 'j', 'k'], bipartite=1)
B.add_edges_from([(1, 'a'), (1, 'b'), (2, 'b'), (2, 'c'), (3, 'c'), (4, 'a'), 
                  (2, 'b'), (3, 'a'), (5, 'k'), (6, 'k'), (6, 'j')])


rcParams['figure.figsize'] = 12, 6
nx.draw(B, node_color='lightblue', 
        with_labels=True)

并且如问题中所述,假设我们想要 select 以下节点列表:

l = [1,'a',6]

看起来你想要 select 其中 最高中心度 的那个。为此你可以这样做:

deg_l = {i:B.degree(i) for i in l}    
highest_centrality_node = max(deg_l.items(), key=lambda x: x[1])[0]

现在我们可以绘制相应的 ego_graph 与:

ego_g = nx.ego_graph(B, highest_centrality_node)
d = dict(ego_g.degree)
nx.draw(ego_g, node_color='lightblue', 
        with_labels=True, 
        nodelist=d, 
        node_size=[d[k]*300 for k in d])