如何快速计算高维向量之间的距离

时间:2010-05-23 13:24:12

标签: algorithm

假设有三组高维向量:

{a_1,a_2,...,a_N},

{b_1,b_2,...,b_N},

{c_1,c_2,...,c_N}。

我的每个矢量可以表示为:x = a_i + b_j + c_k,其中1 <= i,j,k <= N.然后将矢量编码为(i,j,k),其中然后可以解码为x = a_i + b_j + c_k。

我的问题是,如果有两个向量:x =(i_1,j_1,k_1),y =(i_2,j_2,k_2),是否有一种计算这两个向量的欧几里德距离而无需解码x的方法收率

3 个答案:

答案 0 :(得分:3)

组件之间差异的平方和的平方根。没有其他办法可以做到。

您应该缩放值以防止溢出/下溢问题。在平方,求和和取平方根之前,搜索最大差值并除以所有分量。

答案 1 :(得分:1)

我们假设你只有两个小组。您正在尝试计算标量积

(a_i1 + b_j1, a_i2 + b_j2)
= (a_i1,a_i2) + (b_j1,b_j2) + (a_i1,b_j2) + (a_i2,b_j1) # <- elementary scalar products

因此,如果您知道向量a_i,b_j,c_k元素之间必需的基本标量积,则不需要“解码”x和y,并且可以直接计算标量积。

请注意,这正是在非正交基础上计算普通欧几里德距离时所发生的情况。

答案 2 :(得分:0)

如果您对近似结果感到满意,可以使用random projection将高维基矢量投影到小维空间中。 Johnson-Lindenstrauss引理说你可以将尺寸减小到O(log N),这样距离保持大致相同的概率很高。