0

我希望你能对这个相当具有挑战性的问题有正确的答案。

我有两个一维向量YZN ,它们保存位于正方形网格上的网格点的坐标。所以

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?此外,我还想以列优先顺序存储条目。

我希望解释足够清楚。

4

1 回答 1

0

正如woodchips评论的那样,计算整个矩阵并提取您关心的元素更简单、更快捷。这是一种方法:

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

如果您绝对必须先计算Dd不计算矩阵的元素D,您可能需要一个双 for 循环。

于 2013-06-04T14:25:44.857 回答