访问打包对称距离矩阵的元素

时间:2013-08-25 19:54:01

标签: arrays multidimensional-array linear-algebra indices

假设您有一个对称距离矩阵A。例如A4*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]的{​​{1}}。

问题是,如果我们处于相反的情况,即我们在打包矩阵i>0, j<n-1, j<i中有元素索引,我们如何恢复原始的两个索引: 给定ApAp[x]ij的内容为A

谢谢!

1 个答案:

答案 0 :(得分:0)

好的,我找到了答案:

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