2D 座標空間にネットワーク表現があります。隣接行列Adj
(スパース) と、coordinate
描画されるグラフ内のすべての点/ノード/頂点の x、y 値を含む行列があります。
これらのポイント間の距離をできるだけ効率的に計算したいと思います。行列のエントリを循環させてペアワイズ距離を 1 つずつ計算することは避けたいと思います。
2D 座標空間にネットワーク表現があります。隣接行列Adj
(スパース) と、coordinate
描画されるグラフ内のすべての点/ノード/頂点の x、y 値を含む行列があります。
これらのポイント間の距離をできるだけ効率的に計算したいと思います。行列のエントリを循環させてペアワイズ距離を 1 つずつ計算することは避けたいと思います。
[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のような座標行列を想定しています
EDIT 2: Adj が論理行列であるかどうか (または、論理行列のスパース行列を使用できるかどうか) は実際にはわかりません。潜在的な落とし穴を回避するように修正しました
グラフがまばらな場合は、代わりに隣接リストの使用を検討する必要があります。
隣接リストを反復すると、隣接マトリックスの空のエントリを反復するのとは対照的に、ペアの数で線形の接続された時点のすべてのペアを取得できます。