问题
我正在尝试查找无向图的连接组件。
Matlabs函数conncomp
就是这样做的。 Mathworks - connected graph components
示例
使用matlabs网页上给出的示例来保持简单和可重复:
G = graph([1 1 4],[2 3 5],[1 1 1],6);
plot(G)
bins = conncomp(G)
bins =
1 1 1 2 2 3
对此的两个问题
第一个问题:使用此方法我如何找到初始节点索引,以便
cluster1 = (1 2 3); (instead of ( 1 1 1))
cluster2= (4 5); (instead of (2 2))
第二个问题:
我正在研究一个大数据集,我知道很多节点没有连接,所以有没有办法只显示包含多个值的集群? 谢谢你的帮助,我主要被困在这里。
答案 0 :(得分:1)
您可以在第一部分使用splitapply
,如下所示:
clusters = splitapply(@(x) {x}, 1:numnodes(G), bins)
这将返回一个cell
数组,其中每个单元格包含组中节点的索引。您可以使用cellfun
discard = cellfun(@isscalar, clusters);
clusters(discard) = [];
(请注意splitapply
是R2015b中的新功能 - 但OP使用的是graph
,也是R2015b中的新功能,所以对它们来说应该没问题了)
答案 1 :(得分:1)
实际上问题的第一部分可以非常简单地回答,因为Matlabs conncomp
为此提供了一个工具:
bins=conncomp(G,'OutputForm','cell');
创建一个包含群集的单元格数组,其中包含单元格中的所有节点名称。 对于问题的第二部分,我想有几种方法,但也可以使用这种方法:
clusters= bins(cellfun(@numel,bins)>1);