假设有三组高维向量:
{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的方法收率
答案 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),这样距离保持大致相同的概率很高。