【发布时间】: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
所以,基本上,如果A 是n*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 很大时很有用)
访问元素i和j之间的距离相当于访问压缩矩阵中的元素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 中的i 和j 是什么,这样Ap[x] = A[i,j]。
谢谢!
【问题讨论】:
标签: arrays multidimensional-array linear-algebra indices