Python 聚类平均向量

Python 聚类平均向量,python,cluster-computing,cluster-analysis,Python,Cluster Computing,Cluster Analysis,我试图计算每个簇的平均向量。我想得到一个比O(n^2)快得多的方法。我应该改变什么以提高效率 def compute_means(self,clusters,documents) noc=defaultdict(lambda:0) #number of clusters soc=defaultdict(lambda:Counter()) # sum of clusters avg=[] #used for average for c in clusters:

我试图计算每个簇的平均向量。我想得到一个比O(n^2)快得多的方法。我应该改变什么以提高效率

def compute_means(self,clusters,documents)
    noc=defaultdict(lambda:0) #number of clusters
    soc=defaultdict(lambda:Counter()) # sum of clusters
    avg=[] #used for average

    for c in clusters:
        d_ID,c_ID,dist=c
        soc[c_ID] += documents[d_ID]
        noc[c_ID] += 1

    for FFCID in sorted(soc.keys()): #Cluster ID, also reference to CID from final fantasy
        total_n=float(noc[FFCID])
        for k in soc[FFCID].keys(): #keys
            soc[FFCID][k]=soc[FFCID][k]/total_n
    avg.append(soc[FFCID])

    print [item[1] for item in sorted(noc.items())]
    return avg

计算一个集合的平均值通常只标为O(n.d) 即,尺寸和尺寸呈线性

如果这太慢,您需要更好地优化代码。尽可能避免使用hashmaps和lambda之类的花哨东西。其中一些操作带有隐藏(但真实)的价格标签


在使用Python和R等速度较慢的解释器语言时,尽可能使用“矢量化”操作。使用这些工具,您可以将繁重的工作委托给库中的fast C和Fortran代码,最终您将获得更少的自己的代码

可能你使用的是k-均值聚类技术。为了提高效率,你可以尝试另一种聚类算法,这是O(n)而不是O(n^2)。