MATLAB Answers

List of Node pairs

조회 수: 2(최근 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
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

태그

Community Treasure Hunt

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

Start Hunting!

Translated by