Search code examples
matlabgraphadjacency-matrix

How to get an adjacency matrix with weights?


How to get an adjacency matrix with weights?

Suppose I have

s=[1 1 2 2 2 3 3 4 4 4 5 5 6 7];

t=[2 3 4 5 3 5 6 5 7 8 6 8 7 8];

w=[3 5 4 7 4 9 8 3 11 8 3 9 8 7];

G=digraph(s,t,w)

It should have been created with this

A = adjacency(G,'weighted')

but marks an error that says

Error using digraph/adjacency Too many input arguments.

When I type A = adjacency(G) set all costs as 1.

Why?


Solution

  • adjacency only accepts 1 input argument, which is why you are receiving that error. The function is only designed to return values of 0 or 1.

    You can get the weighted adjacency matrix from the following, taken from the MATLAB documentation for the adjacency function.

    nn = numnodes(G);
    [s,t] = findedge(G);
    A = sparse(s,t,G.Edges.Weight,nn,nn)
    

    Alternatively, you can construct the weighted adjacency matrix without using graph objects.

    nn = max([s, t]);
    A = zeros(nn);
    for i = 1:length(s)
      A(s(i), t(i)) = w(i);
    end