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.

Thanks

4 Comments

What have you already tried?
Have a read here and here. It will greatly improve your chances of getting an answer.
Sir, I had tried to get a n by n adjacency matrix in which n denotes the unique number of nodes in the dataset. For eg: A group has six nodes, i.e., a, b, c, d, e, and f .The links of the nodes are ab, ac, ad, ae, ba, bc, bd, bf, be,cd, cf, da, dc, df, ea, ed, ef, and fe. The unique nodes of both followees and followers are a, b, c, d, e, and f . So, I want a 6 by 6 matrix x in which, a is connected to b, c, d, and e; therefore, x12 = x13 = x14 = x15 = 1. By contrast, a is not connected to a and f, therefore x11 = x16 = 0. All the other cells are assigned values using the same method. Thanks
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.
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

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

Thank you for your reply, But when I do this there is an error in line 4, that is,
>> g = graph(edges(:, 1), edges(:, 2)); ??? Undefined function or method 'graph' for input arguments of type 'cell'.
What should I do?
The graph function was introduced in R2015b so you will not have it if you have an earlier version.
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!