Filter löschen
Filter löschen

Create a Graph from a matrix

23 Ansichten (letzte 30 Tage)
stam dadi
stam dadi am 20 Jun. 2017
Kommentiert: alice am 23 Jun. 2017
I have the following matrix A[10,6]
ans =
1 1 0 0 0 1
1 1 1 1 0 0
1 1 1 1 0 0
1 0 0 0 1 1
1 1 0 0 0 0
0 1 1 1 0 1
1 0 0 1 0 1
0 1 1 1 1 1
0 1 1 1 1 1
1 1 1 0 1 1
I want to create a directed graph from that matrix, My graph will contain one node for each column and one node for every two lines (so a total of 11 nodes). if possible distinguish between them.
For the edges , I have two cases :
- An edge from a column node to a line node is added for all the 1 in the first line of the node in the matrix.
- An edge from the line node to a column node is added for all the 1 in the second line of the node in the matrix.
I made some research in the graph section of the documentation but couldn't get it done .
Thanks

Akzeptierte Antwort

alice
alice am 21 Jun. 2017
To get a directed graph, you should use digraph function. In order to do so, you have to build a standard square adjacency matrix describing how your nodes are connected. This is one way to do it (choosing to put the column nodes first in the adjacency matrix):
nNodeCol = size(A,2); % one node for each column of A
nNodeLine = size(A,1)/2; % one node for every two lines of A
% First the column nodes, then the line nodes:
nodeNames = [cellstr(strcat('column', num2str((1:size(A,2))'))) ; cellstr(strcat('line', num2str((1:size(A,1)/2)')))];
% Adjacency matrix adj, adj(i,j)=1 means there is an edge from node#i to node#j:
adj = zeros(nNodeCol+nNodeLine); % square matrix which size is the number of nodes
adj(1:nNodeCol, nNodeCol+1:end) = A(1:2:end,:)'; % edge from a column node to a line node is added for all the 1 in the first line of the node in the matrix
adj(nNodeCol+1:end, 1:nNodeCol) = A(2:2:end,:); % edge from the line node to a column node is added for all the 1 in the second line of the node in the matrix
% Here is your graph:
G = digraph(adj,nodeNames);
plot(G);
  3 Kommentare
stam dadi
stam dadi am 22 Jun. 2017
I want to do a depth search using the function
dfsearch
But I need the name of nodes, how to get them from the previous graph declaration ...Thank's
alice
alice am 23 Jun. 2017
The names are in the cell nodeNames.
To get the node names from a graph G, you can simply use G.Nodes .

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Mehr zu Graph and Network Algorithms finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by