距离公式
-
Euclidean distance(欧式距离)
-
Taxicab geometry (曼哈顿距离)
-
Cosine similarity(余弦距离)
-
Hamming distance(汉明距离)
在信息论中,两个等长字符串之间的汉明距离是相应符号不同的位置数。换句话说,它测量将一个字符串转换为另一个字符串所需的最小替换数,或可能将一个字符串转换为另一个字符串的最小错误数。
例如:
“karolin” and “kathrin” is 3.
“karolin” and “kerstin” is 3.
“kathrin” and “kerstin” is 4.
1011101 and 1001001 is 2.
2173896 and 2233796 is 3. -
Dot product(点积)
annoy API说明
AnnoyIndex(f,metric)
创建一个索引对象,用以读写和保存vector,f为vertor的dimension,metric为距离的度量标准:“angular”, “euclidean”, “manhattan”, “hamming”, “dot”a.add_item(i,v)
用于给索引添加向量v,i(任何非负整数)是给向量v的表示。a.build(n_trees,n_jobs = -1)
建立n_trees树的森林。查询时,树越多,精度越高。调用build之后,不能再添加任何项目。n_jobs指定用于构建树的线程数。n_jobs = -1使用所有可用的CPU内核。a.save(fn,prefault = False)
将索引保存到磁盘并加载(请参阅下一个函数)。保存后,不能再添加任何项目。a.load(fn,prefault = False)
从磁盘加载(映射)索引。如果prefault设置为True,它将把整个文件预读到内存中(使用带有MAP_POPULATE的mmap )。默认值为False。a.unload()
卸载。a.get_nns_by_item(i,n,search_k = -1, include_distances = False)
返回第i 个item的n个最近邻的item。在查询期间,它将最多检查search_k个节点(如果未提供,则默认为n_trees * n个)。search_k为您提供了更好的准确性和速度之间的运行时权衡。如果将include_distances设置为True,它将返回一个包含两个列表的2元素元组:第二个包含所有对应的距离。a.get_nns_by_vector(v,n,search_k = -1, include_distances = False)
与上一个相同,通过向量v查询。a.get_item_vector(i)
返回先前添加的项i的向量。a.get_distance(i,j)
返回项目i和j之间的距离。。a.get_n_items()
返回索引中的项目数。a.get_n_trees()
返回索引中的树数。a.on_disk_build(fn)
指定文件而不是RAM中建立索引(在添加项目之前执行,在建立之后无需保存)a.set_seed(seed)
将使用给定的种子初始化随机数生成器。仅用于构建树,即仅在添加项目之前需要传递它。调用a.build(n_trees)或a.load(fn)后将无效。
官网示例
from annoy import AnnoyIndex
import random
f = 3
t = AnnoyIndex(f, 'angular') # 创建一个索引对象,用以读写和保存vector
for i in range(10):
v = [random.gauss(0, 1) for z in range(f)] # v表示索引i的vector,维度为3
print("索引:{}"<