如何从距离矩阵计算原始矢量?

我对矢量和矩阵有一个小问题。 假设向量V = {v1,v2,...,vn}。我生成一个n×n距离矩阵M,定义如下: M_ij = | v_i - v_j |这样我,j属于[1,n]。 也就是说,方阵中的每个元素M_ij是V中两个元素的绝对距离。 例如,我有一个向量V = {1,3,3,5},距离矩阵将是 M = [ 0 2 2 4; 2 0 0 2; 2 0 0 2; 4 2 2 0; ] 看起来很简单。现在来问题了。给定这样的矩阵M,如何获得初始V? 谢谢。 基于这个问题的一些答案,似乎答案并不是唯一的。所以,现在假设所有初始向量已经归一化为0均值和1个方差。问题是:给定这样一个对称距离矩阵M,如何确定初始归一化向量?     
已邀请:
你不能。为了让您了解原因,请考虑以下两种情况:   V1 = {1,2,3}      M1 = [0 1 2; 1 0 1; 2 1 0]      V2 = {3,4,5}      M2 = [0 1 2; 1 0 1; 2 1 0] 如您所见,单个M可能是多个V的结果。因此,您无法向后映射。     
没有办法唯一地确定答案,因为距离矩阵对于向所有元素添加常量并将所有值乘以-1是不变的。假设元素1等于0,并且第一个非零元素为正,则可以找到答案。这是伪代码:
# Assume v[1] is 0
v[1] = 0
# e is value of first non-zero vector element
e = 0
# ei is index of first non-zero vector element
ei = 0
for i = 2...n:
  # if all vector elements have been 0 so far
  if e == 0:
    # get the current distance from element 1 and its index
    # this new element may still be 0
    e = d[1,i]
    ei = i
    v[i] = e
  elseif d[1,i] == d[ei,i] + v[ei]: # v[i] <= v[1]
    # v[i] is to the left of v[1] (assuming v[ei] > v[1])
    v[i] = -d[1,i]
  else:
    # some other case; v[i] is to the right of v[1]
    v[i] = d[1,i]
    
我认为找不到原始矢量是不可能的,但你可以通过取矩阵的第一行来找到矢量的平移。 如果你让M_ij = | v_i - v_j |并且你将在[1,n]中翻译所有v_k for k M_ij = | v-i + 1 - v_j + 1 |      = | v_i - v_j | 因此,只需将第一行作为向量,并找到一个将矢量转换为的初始点。 更正:
Let v_1 = 0, and let l_k = | v_k | for kin [2,n] and p_k the parity of v_k

Let p_1 = 1

for(int i = 2; i < n; i++)
   if( | l_i - l_(i+1) | != M_i(i+1) )
      p_(i+1) = - p_i
   else
      p_(i+1) = p_i
按顺序为[2,n]中的所有v_k执行此操作将显示每个v_k相对于其他v_k的奇偶校验 然后,您可以找到具有相同或相反方向的原始矢量的平移 更新(对于标准化向量):
  Let d = Sqrt(v_1^2 + v_2^2 + ... + v_n^2)

  Vector = {0, v_1 / d, v_2 / d, ... , v_n / d}
            or
           {0, -v_1 / d, -v_2 / d, ... , -v_n / d}
    

要回复问题请先登录注册