1

我在二维坐标空间中有网络表示。我有一个邻接矩阵Adj(它是稀疏的)和一个coordinate矩阵,其中包含绘制的图中所有点/节点/顶点的 x,y 值。

我想尽可能有效地计算这些点之间的距离。我想避免循环遍历矩阵中的条目并一一计算成对距离。

4

2 回答 2

2
[n, d] = size(coordinate);
assert(d == 2);
resi = sparse(Adj * diag(1:n));
resj = sparse(diag(1:n) * Adj);
res = sparse(zeros(n));
f = find(Adj)
res(f) = sqrt((coordinate(resi(f), 1) - coordinate(resj(f), 1)) .^ 2 + (coordinate(resi(f), 2) - coordinate(resj(f), 2)) .^ 2);

编辑:糟糕,修复了一个错误

澄清:我假设你的意思是坐标矩阵http://www.passagesoftware.net/webhelp/Coordinate_Matrix.htm

编辑 2:我实际上不确定 Adj 是否是一个逻辑矩阵(或者你是否可以有一个稀疏的逻辑矩阵)。我修复了它以避开潜在的陷阱

于 2013-03-18T20:30:47.150 回答
1

如果您的图是稀疏的,那么您应该考虑使用邻接列表

遍历邻接列表将允许您在时间对的数量上获得所有连接点对,而不是遍历邻接矩阵中的空条目。

于 2013-03-18T17:08:24.093 回答