我正在寻找可扩展的答案,但出于我的特定目的,我有一个48维向量。这可以表示为48个整数的数组,全部在0到255之间。
我有一本关于这些载体的大字典,大约有2.5万个。
我需要能够获取可能存在或不存在于我的数据库中的向量,并快速找到数据库中哪个向量最接近。最接近,我的意思是传统的距离公式。
我的代码将以python结尾,但这是一个普遍的问题。
蛮力太慢了。我需要一个近词典速度查找。有人有想法吗?
答案 0 :(得分:8)
我建议您实施一个kd-tree来执行Nearest neighbour search。 k维中N个点的最坏情况搜索时间为O(k.N^(1-1/k))
,因此它应该在N中进行次线性缩放。
如果我有时间,我会回到这个答案并提供维基百科的简洁解释。
由于您在python中工作,kdtrees上的Scipy食谱条目应该有所帮助。
答案 1 :(得分:4)
另一种有用的技术是局部敏感哈希:http://en.wikipedia.org/wiki/Locality_sensitive_hashing
从您的问题中不清楚您是否需要-exact-最近邻居。如果您对返回近似最近邻居的向量感到满意,则可以使用更快的解决方案。见这里(http://www.cs.umd.edu/~mount/ANN/)