Adjacency matrix of a network to Distance matrix (Two -Hop)
15 visualizzazioni (ultimi 30 giorni)
Mostra commenti meno recenti
Christy Jackson
il 17 Mar 2016
Commentato: Muhammad fawad
il 9 Set 2021
I have the following code for generating an adjacency matrix for a network. How do I go about creating a distance matrix (Probably a two hop matrix) from this output.
function adj = AdjMatrixLattice4( N, M )
% Size of adjacency matrix
MN = M*N;
adj = zeros(MN,MN);
for i=1:N
for j=1:N
A = M*(i-1)+j; %Node # for (i,j) node
if(j<N)
B = M*(i-1)+j+1; %Node # for node to the right
C = M*(i-1)+j+2;
D = M*(i-1)+j+2;
adj(A,B) = 1;
adj(B,A) = 1;
adj(A,C) = 1;
adj(C,A) = 1;
adj(A,D) = 1;
adj(D,A) = 1;
end
if(i<M)
B = M*i+j;
C = M*i+j+1; %Node # for node below
D = M*i+j;
adj(A,B) = 1;
adj(B,A) = 1;
adj(A,C) = 1;
adj(C,A) = 1;
adj(A,D) = 1;
adj(D,A) = 1;
end
end
end
end
ans =
0 1 1 1 1 0 0 0 0 0
1 0 1 1 1 1 0 0 0 0
1 1 0 0 0 1 1 0 0 0
1 1 0 0 1 1 1 1 0 0
1 1 0 1 0 1 1 1 1 0
0 1 1 1 1 0 0 0 1 1
0 0 1 1 1 0 0 1 1 0
0 0 0 1 1 0 1 0 1 1
0 0 0 0 1 1 1 1 0 0
0 0 0 0 0 1 0 1 0 0
How do i convert this to a two hop distance matrix.?
Can someone help?
5 Commenti
Ced
il 19 Mar 2016
I see, thanks! I copied one of the solutions to the answer section so you can close the topic. Cheers
Risposta accettata
Ced
il 19 Mar 2016
Possible solution, see comment section for details:
A = [ 0 1 1 0 0 0 0 0
1 0 1 0 0 0 0 0
1 1 0 1 0 0 0 0
0 0 1 0 1 1 0 0
0 0 0 1 0 0 1 0
0 0 0 1 0 0 1 0
0 0 0 0 1 1 0 1
0 0 0 0 0 0 1 0 ];
MN = size(A,1);
%%%%%%%%%%%%%%%%%%%%%%%%%%
%%Looking at each node once
A = logical(A);
TwoHopMat_2 = zeros(MN,MN);
for i = 1:MN
% This is everyone Node i can reach in a single hop
single_hops = A(i,:);
% now combine it with every node it can reach in two hops
TwoHopMat_2(i,:) = any([ single_hops ; A(single_hops,:) ],1);
end
% we want the diagonal to be false
TwoHopMat_2 = xor(TwoHopMat_2,diag(true(MN,1)));
1 Commento
Più risposte (1)
Christine Tobler
il 25 Apr 2016
An easier way to compute the two-hop matrix is through matrix multiplication, I think.
The adjacency matrix A is the one-hop matrix. The matrix A2 = A*A has a non-zero in A(i, j), if it is possible to go from node i to node j in exactly two steps. Use A + A*A to get non-zeros in A(i, j) if you can go from node i to node j in 2 or less steps.
2 Commenti
Rogier Noldus
il 19 Ago 2021
When we use A + A*A, then (A + A*A)_ij is the mathematical sum of A_ij and A*A_ij. Shouldn't we rather use A OR A*A? (A OR A*A)_ij will have a value 1 in position (i,j) when node j can be reached from node i in 1 hop or in 2 hops.
Vedere anche
Categorie
Scopri di più su Graph and Network Algorithms in Help Center e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!