Azzera filtri
Azzera filtri

Create a Graph from a matrix

23 visualizzazioni (ultimi 30 giorni)
stam dadi
stam dadi il 20 Giu 2017
Commentato: alice il 23 Giu 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

Risposta accettata

alice
alice il 21 Giu 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 Commenti
stam dadi
stam dadi il 22 Giu 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 il 23 Giu 2017
The names are in the cell nodeNames.
To get the node names from a graph G, you can simply use G.Nodes .

Accedi per commentare.

Più risposte (0)

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!

Translated by