2014-02-26 103 views
2

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

回答

4

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)]