MATLAB - 使用邻接矩阵和坐标计算图形/网络中各点之间距离的有效方法

时间:2013-03-18 17:00:17

标签: matlab matrix sparse-matrix matrix-multiplication euclidean-distance

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

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

2 个答案:

答案 0 :(得分: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是否是逻辑矩阵(或者你是否可以有一个稀疏的逻辑矩阵)。我修复它以避开潜在的陷阱

答案 1 :(得分:1)

如果图表稀疏,则应考虑使用adjacency lists

通过邻接列表迭代将允许您按时间线性地获得所有成对的连接点,而不是迭代邻接矩阵中的空条目。