I am a beginner in matlab. So, Could anyone please help me to create an adjacency matrix based on this attached dataset? This set consists of nodes and edges, so I want adjacency matrix where 1 represents connected nodes otherwise 0.

1 view (last 30 days)
Thanks
  4 Comments
Guillaume
Guillaume on 24 Mar 2017
We know what an adjacency matrix is. Rik was asking you to demonstrate that you'd made some effort towards getting your answer, particularly if it's homework.
SUNANNA S S
SUNANNA S S on 27 Mar 2017
Edited: Guillaume on 27 Mar 2017
Sorry for the mistake Sir. This is the code that I tried, but this has so many problems.Please help.
function osnToBIS()
clc;
A=csvread('twitnet');
B=unique(A);
m=size(B);
for i=1:size(B)
[r,c]=find(B(i)==A);
for j=1:size(c)
if c(j)==1
c(j)=2;
else
c(j)=1;
end
end
N=A(r,c);
radj=find(adj(:,1)==B);
cadj=find(adj(1,:)==unique(N));
adj(radj,cadj);
end
The error in this program is:
Undefined variable adj.
Error in osnToBIS (line 16)
radj=find(adj(:,1)==B);

Sign in to comment.

Accepted Answer

Guillaume
Guillaume on 21 Mar 2017
Once you've imported your data, the graph and adjacency function are pretty much all you need . However, considering that you've got 892 nodes, that adjacency matrix is going to be big and imposible to visualise.
Two issues are that your text file contains a lot of empty entries (just ,) which needs to be filtered out, and that if you give numeric nodes to graph it expects these to be numbered from 1 to numberofnoes. You can either converts the numbers to char arrays or renumber the nodes(with unique).
edges = dlmread('twitnet.csv');
edges(all(edges == 0, 2), :) = [];
edges = arrayfun(@num2str, edges, 'UniformOutput', false);
g = graph(edges(:, 1), edges(:, 2));
plot(g);
adjm = full(adjacency(g))
  4 Comments
Guillaume
Guillaume on 24 Mar 2017
You really should move to a version of matlab a bit more recent. You're missing out on lots of useful graph functions (in particular, the above will give you a very nice plot of your graph).
Without the nice graph functions, you can still build the adjacency matrix with a bit more effort:
edges = dlmread('twitnet.csv');
edges(all(edges == 0, 2), :) = [];
[uedges, ~, erow] = unique(edges.', 'stable'); %transpose and stable to give the same output as graph
adjm2 = full(sparse(erow(1:2:end), erow(2:2:end), 1, numel(uedges), numel(uedges)));
adjm2 = adjm2 + adjm2.';

Sign in to comment.

More Answers (0)

Categories

Find more on Graph and Network Algorithms in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!