我希望你能对这个问题有正确的答案,这是相当挑剔的。
我有两个单维向量 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
的下三角项定义?此外,我还想按照列主要顺序存储条目。
我希望解释清楚。
答案 0 :(得分:0)
如woodchips所述,计算整个矩阵并提取您关心的元素更简单,更快捷。这是一种方法:
ndx = find(tril(true(size(D))));
Dd = D(ndx);
如果你必须首先计算Dd
的元素而不计算矩阵D
,你可能需要一个双循环。