最小生成树切割后的聚类

时间:2010-07-05 02:22:43

标签: python graph union intersection

切割具有最大边长的MST后,群集节点的最佳方法是什么?我从MST边长剪切得到的输出是一个2xN数组,其中每个元素都是一个整数。整数是描述边的节点标识符。输出的一个例子如下:

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

我通常处理100到20,000个节点。我的MST代码足够快,但是它被群集/分组算法所困扰。这是一个循环繁重的功能集,这就是减慢它的速度。请查看以下代码。关于如何加快速度的任何想法?我知道这是一种蛮力方法,所以更清洁的方法是最好的。在此先感谢您的帮助!

干杯,

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 :(得分:0)

问题已经解决了。转到NetworkX google群组链接以查看解决方案。

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

干杯,