如何使用Python有效地收集相似向量?

时间:2019-03-17 21:40:02

标签: python performance group-by coding-efficiency

我有大量的3维向量,每个向量都与权重相关联。也就是说,集合的格式为

  

{[[[0.707,0.5,0.5],0.3],[[0.6,0.8,0],0.2] ....}

我想收集彼此靠近的向量,并对它们的权重求和。现在我的想法是:如果向量A与另一个向量B接近,那么我会将它们视为相同的向量,并将A的权重加到B的权重上。Python代码为

def gathervecs(vecs):
    gathers = []
    for vec in vecs: #in each vec, there are two elements, the first one is the normalized vector, and the second is the norm**2.
        index = 0
        for i,avec in enumerate(gathers):
            if sum(abs(vec[0] - avec[0])) < 10**(-10):
                (gathers[i])[1] = avec[1]+vec[1]
                index = 1
                break
                if index==0:
                gathers.append(vec)
                return gathers

但是这段代码的时间是原始集合大小的多项式。那么,问题是如何设计更有效的算法?

PS:请生成原始集以随机测试算法的效率。

0 个答案:

没有答案