python - 计算相似向量的频率
问题描述
我有一个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) )应计为相同;
解决方案
有点晚了,但我会发布我的最终解决方案作为答案,也许有人感兴趣:
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)}
推荐阅读
- javascript - 在 ReactJS 中提交表单后没有获取任何数据
- sql - 展平和重构 JSON 雪花
- hystrix - Resilience4j 与 Sentinel
- lightbox - gLightBox 尝试打开 Vimeo 视频而不是图像
- linux - 如何在运行脚本时通过传递命令行参数来设置变量的值?
- google-apps-script - Google Apps 脚本 - 使用一种功能删除所有工作表中的重复项
- distance - 关于 Milvus 距离计算的问题
- reactjs - ButtonComponent 中的 Material-UI Button 组件。ParentButton 已禁用,但 ChildButton 应启用。我该如何解决?
- kotlin - 使用协程通道时,如何激活 -> 运算符?
- javascript - Mongoose 获取对象数组中的对象