List of Node pairs

조회 수: 3 (최근 30일)
Hari
Hari 2021년 7월 15일
답변: Akira Agata 2021년 7월 16일
How can I get a matrix of node pairs from a graph? That is, if there are 4 nodes 1,2,3,4, then the node pair matrix would be :
1 2
1 3
1 4
2 1
2 3
2 4
3 2 etc.
I could do this using 2 for loops, but is there any quick way of doing it?
  댓글 수: 2
Akira Agata
Akira Agata 2021년 7월 16일
Questions for clarification:
  • You want to obtain node pair matrix from graph object ?
  • If the graph has an edge from node m to node n, you need both (n, m) and (n, m) in your matrix?
Hari
Hari 2021년 7월 16일
Sorry if the question was confusing. I need to get the list of node pairs but it need not be from the graph object. Knowing the number of nodes in the graph would be sufficient I guess. If there are 4 nodes in the graph then the output should be:
1 2
1 3
1 4
2 1
2 3
2 4
3 1
3 2
3 4
etc..
The edges in the graph is not important here.

댓글을 달려면 로그인하십시오.

채택된 답변

Akira Agata
Akira Agata 2021년 7월 16일
Another possible solution:
numNode = 4;
[r,c] = find(~eye(numNode));
v = [c,r];
>> v
v =
1 2
1 3
1 4
2 1
2 3
2 4
3 1
3 2
3 4
4 1
4 2
4 3

추가 답변 (2개)

Simon Chan
Simon Chan 2021년 7월 16일
Basically you just want to create the matrix, right?
u=1:4;
u_entend = repelem(u,1,length(u)-1);
w = repmat(u',1,length(u));
v = reshape(tril(w,-1) + triu(w,1),1,[]);
v = v(v~=0);
node_pair = [u_entend;v]'
Result:
node_pair =
1 2
1 3
1 4
2 1
2 3
2 4
3 1
3 2
3 4
4 1
4 2
4 3

Walter Roberson
Walter Roberson 2021년 7월 16일
u=1:4;
[s,t] = ndgrid(u);
v = [s(:),t(:)];
mask = v(:,1) ~= v(:,2);
v = v(mask,:);
v
v = 12×2
2 1 3 1 4 1 1 2 3 2 4 2 1 3 2 3 4 3 1 4

카테고리

Help CenterFile Exchange에서 Graph and Network Algorithms에 대해 자세히 알아보기

태그

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by