我有一个二分图,其中包括节点(a1,a2,...a100, m1,m2,...)。我想找到特定节点(a1、a2和a10)的诱导子图。我可以使用
networkx.ego_graph
执行此操作,但它一次只处理一个顶点,并返回诱导图。我想知道是否有方法可以同时处理我感兴趣的所有节点,然后选择最大的节点。networkx.ego_graph
执行此操作,但它一次只处理一个顶点,并返回诱导图。我想知道是否有方法可以同时处理我感兴趣的所有节点,然后选择最大的节点。对于一般情况,可以使用nx.ego_graph
来获得自我图。
虽然在您的特定情况下,看起来您想在网络中找到最大的诱导自我图
。为此,您可以首先找到具有最高度数的节点,然后获取其自我图。
让我们创建一个二分图的示例:
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)
正如问题中提到的那样,假设我们想从以下节点列表中进行选择:
l = [1,'a',6]
看起来你想在这些中选择具有最高中心度的那个。为此,你可以执行以下操作:
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])