Arrays 压缩对称距离矩阵的存取元
假设你有一个对称的距离矩阵Arrays 压缩对称距离矩阵的存取元,arrays,multidimensional-array,linear-algebra,indices,Arrays,Multidimensional Array,Linear Algebra,Indices,假设你有一个对称的距离矩阵a。例如A是4*4(矩阵上方和左侧的数字是测量距离的元素的索引,我们仅使用较低的三角形): 因此,基本上,如果A是n*n,我们只有n*(n-1)/2有用的条目。消除对角线上的零,我们得到以下矩阵(类似于Matlab和R的矩阵): 接下来,我们可以有效地将该矩阵以压缩格式存储在一维数组中,其中包含np=n*(n-1)/2个元素: Ap = {a10, a20, a21, a30, a31, a32} 这可以加快许多搜索(例如搜索最近的元素对等)并节省大量空间(当n较大时
a
。例如A
是4*4
(矩阵上方和左侧的数字是测量距离的元素的索引,我们仅使用较低的三角形):
因此,基本上,如果A
是n*n
,我们只有n*(n-1)/2
有用的条目。消除对角线上的零,我们得到以下矩阵(类似于Matlab和R的矩阵):
接下来,我们可以有效地将该矩阵以压缩格式存储在一维数组中,其中包含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好,我找到了答案:
i = floor{ (1 + sqrt[1 + 8*x])/2 }
j = x - i
Ap = {a10, a20, a21, a30, a31, a32}
i = floor{ (1 + sqrt[1 + 8*x])/2 }
j = x - i