使用python的networkx库,可以从图G中提取k-core。 但是有可能提取某个k的所有k核心吗?我想做图形聚类,我的想法是为大的k值提取k核并定义像这样的聚类。
答案 0 :(得分:6)
NetworkX中使用的k-core的定义不需要连接k-core。 http://networkx.lanl.gov/reference/generated/networkx.algorithms.core.k_core.html
因此,您将获得图中所有(可能已断开连接的)k核。
以下是2个不相交的3节点完整图的图表的简单示例:
In [1]: import networkx as nx
In [2]: G = nx.Graph([(1,2),(1,3),(2,3)])
In [3]: G.add_edges_from([(10,20),(10,30),(20,30)])
In [4]: nx.k_core(G,k=2).edges()
Out[4]: [(1, 2), (1, 3), (2, 3), (10, 20), (10, 30), (20, 30)]
如果您希望它们作为单独的子图,您可以找到连接的组件:
In [5]: graphs = nx.connected_component_subgraphs(nx.k_core(G,k=2))
In [6]: for g in graphs:
...: print g.edges()
...:
[(1, 2), (1, 3), (2, 3)]
[(10, 20), (10, 30), (20, 30)]
答案 1 :(得分:0)
这个链接是一个很好的例子
查找无向图的 k 核 - GeeksforGeeks https://www.geeksforgeeks.org/find-k-cores-graph/