【问题标题】:Accessing elements of packed symmetric distance matrix访问压缩对称距离矩阵的元素
【发布时间】:2013-08-28 06:56:54
【问题描述】:

假设您有一个对称距离矩阵A。比如A就是4*4(矩阵左上角的数字是元素之间的距离度量的索引,我们只使用下三角):

   0   1   2   3  
   _____________
0 |0   0   0   0
1 |a10 0   0   0
2 |a20 a21 0   0
3 |a30 a31 a32 0

所以,基本上,如果An*n,我们只有n*(n-1)/2 有用的条目。消除对角线上的零,我们得到以下矩阵(类似于 Matlab 和 R 的矩阵):

A=     0   1   2  
       _________
    1 |a10 0   0
    2 |a20 a21 0
    3 |a30 a31 a32

接下来,我们可以将该矩阵高效地存储在包含np = n*(n-1)/2 元素的打包格式的一维数组中:

Ap = {a10, a20, a21, a30, a31, a32}

这可以加快许多搜索(例如搜索最接近的元素对等)并节省大量空间(当n 很大时很有用)

访问元素ij之间的距离相当于访问压缩矩阵中的元素j+i(i-1)/2,即A[i,j] = Ap[j+i(i-1)/2]对应i>0, j<n-1, j<i

问题是如果我们处于相反的情况,即我们在压缩矩阵Ap中有元素的索引,我们如何恢复原来的两个索引: 给定Ap[x]A 中的ij 是什么,这样Ap[x] = A[i,j]

谢谢!

【问题讨论】:

    标签: arrays multidimensional-array linear-algebra indices


    【解决方案1】:

    好的,我找到了答案:

    i = floor{ (1 + sqrt[1 + 8*x])/2 }
    j = x - i
    

    【讨论】:

      猜你喜欢
      • 2011-08-08
      • 2016-08-15
      • 2012-10-16
      • 2020-07-04
      • 1970-01-01
      • 1970-01-01
      • 2020-02-21
      • 2023-03-25
      • 2017-11-06
      相关资源
      最近更新 更多