距离矩阵计算

时间:2013-06-04 14:08:23

标签: matlab triangular

我希望你能对这个问题有正确的答案,这是相当挑剔的。

我有两个单维向量 Y Z ,它们保持位于方形网格上的N网格点的坐标。所以

Ny points along Y
Nz points along Z
N = Ny*Nz
Y = Y[N]; (Y holds N entries)
Z = Z[N]; (Z holds N entries)

现在,目标是生成距离矩阵D,其中包含N*N个条目:因此矩阵D的每一行都定义为距离在网格上的第i 点和剩余的(N - i)点之间。

通常,为了计算整个矩阵,我会调用

D = squareform(pdist([Y Z]));

或等价地,

D = pdist2([Y Z],[Y Z]).

但是,由于D是对称矩阵,因此我只想生成N(N + 1)/2个独立条目,并将它们存储到行有序向量Dd中。

所以问题是:如何生成一个行有序数组Dd,其条目由矩阵D的下三角项定义?此外,我还想按照列主要顺序存储条目。

我希望解释清楚。

1 个答案:

答案 0 :(得分:0)

woodchips所述,计算整个矩阵并提取您关心的元素更简单,更快捷。这是一种方法:

ndx = find(tril(true(size(D))));
Dd = D(ndx);

如果你必须首先计算Dd的元素而不计算矩阵D,你可能需要一个双循环。