首页 > 解决方案 > 计算相似向量的频率

问题描述

我有一个N二维向量列表,想找出哪些是k最常出现的 (=eg3) 向量。

差异(例如距离,或者哪个是最好的“相似性度量”?)小于阈值的向量th应该被视为相同。所有相似的向量都可以通过它们的平均值来聚合。

所以我想要的输出将是k具有各自频率的向量字典f

最小的例子:

k = 1
input = [[1.0,2.0],[1.1,2.1],[3.0,4.0]]
output = {[1.05,2.05]:2}

计算它的最有效算法是什么(伪代码或python会很好)。

编辑: 相同但方向相反的向量(例如 (1,-1) 和 (-1,1) )应计为相同;

标签: pythonalgorithmsearchvectorpseudocode

解决方案


有点晚了,但我会发布我的最终解决方案作为答案,也许有人感兴趣:

import json

def get_most_freq_k(arr,k):  
    d = dict() 
    # Traverse through array elements  
    # and count frequencies 
    for i in range(len(arr)): 
        key = json.dumps(arr[i])
        if key in d.keys(): 
            d[key] += 1
        else: 
            d[key] = 1          
    # return dict with the k most frequent elements
    mostFreqKeys = sorted(d, key=d.get, reverse=True)[:k]
    return {k: d[k] for k in set(mostFreqKeys)}

推荐阅读