使用networkx提取所有k核

时间:2014-02-26 16:59:29

标签: python machine-learning cluster-analysis

使用python的networkx库,可以从图G中提取k-core。 但是有可能提取某个k的所有k核心吗?我想做图形聚类,我的想法是为大的k值提取k核并定义像这样的聚类。

2 个答案:

答案 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/