最小生成树切割后的聚类分析

1 投票
1 回答
1638 浏览
提问于 2025-04-16 00:49

在切割最大边长的最小生成树(MST)后,如何对节点进行最佳聚类呢?我从MST切割得到的结果是一个2行N列的数组,每个元素都是一个整数。这些整数是节点的标识符,用来描述边。下面是一个输出的例子:

>>> print array[0:3]
[[  0   1]
 [  0   2]
 [  2  17]]

我通常处理的节点数量在100到20,000之间。我的MST代码运行得还不错,但聚类/分组算法却拖慢了速度。这个算法里有很多循环,这就是导致它变慢的原因。请看下面的代码。有没有什么办法可以加快速度?我知道这是一种暴力方法,所以如果能有更简洁的方法就更好了。提前感谢你的帮助!

祝好,

Eli

def _super_intersection(edges):
    group = set(edges[0])
    index = np.array([0])
    k = 0
    while k < 100:
        k += 1
        i = 0
        for edge in edges[1:]:
             i += 1
             edge = set(edge)
             if group & edge:
                 group = group | edge
                 index = np.append(index, i)

index = np.unique(np.array(index))
return group, index


def cluster(self, gmin = 5):
    # A 2xN array of node IDs
    edges = self.edges
    group_nodes = {}
    for no, edge in enumerate(edges):
        try:
            group, indice = _super_intersection(edges)
            id_no = no                
            edges = np.delete(edges,indice,0)
            if len(group) >= gmin:
                group_nodes[id_no] = list(group)
        except:
            self.group_nodes = group_nodes

1 个回答

0

这个问题已经解决了。你可以去NetworkX的谷歌小组链接查看解决方案。

http://groups.google.com/group/networkx-discuss/browse_thread/thread/4ac4250d460a1b75

祝好,

Eli

撰写回答