我在二维坐标空间中有网络表示。我有一个邻接矩阵Adj
(它是稀疏的)和一个coordinate
矩阵,其中包含绘制的图中所有点/节点/顶点的 x,y 值。
我想尽可能有效地计算这些点之间的距离。我想避免循环遍历矩阵中的条目并一一计算成对距离。
我在二维坐标空间中有网络表示。我有一个邻接矩阵Adj
(它是稀疏的)和一个coordinate
矩阵,其中包含绘制的图中所有点/节点/顶点的 x,y 值。
我想尽可能有效地计算这些点之间的距离。我想避免循环遍历矩阵中的条目并一一计算成对距离。
[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 是否是一个逻辑矩阵(或者你是否可以有一个稀疏的逻辑矩阵)。我修复了它以避开潜在的陷阱
如果您的图是稀疏的,那么您应该考虑使用邻接列表。
遍历邻接列表将允许您在时间对的数量上获得所有连接点对,而不是遍历邻接矩阵中的空条目。