construction of matrix using specified data sets

1 view (last 30 days)
I've the following dataset:
node1 =
1
2
3
4
1
node2 =
2
3
4
5
7
cost =
23 for arc(1,2) # arc is a combination of node1 and node2
14 for arc(2,3)
123 for arc(3,4)
111 for arc(4,5)
60 for arc(1,7)
I would like to create a nxm matrix say C with rows and columns being the maximum of (nodes1,nodes2)(in this case it would be 7 so it would be a 7x7 matrix) such that C will have the values of the column vector 'cost' for its respective arcs ( arc is connection between elements of node1 and node2) otherwise it would have a value 0. So my resulting matrix should look like this:
[0 23 0 0 0 0 60;
23 0 14 0 0 0 0;
0 14 0 123 0 0 0;
0 0 123 0 111 0;
0 0 0 111 0 0 0;
0 0 0 0 0 0 0;
60 0 0 0 0 0 0]
I am not sure I can do this using matlab. Please help.

Accepted Answer

Walter Roberson
Walter Roberson on 15 Jun 2013
data = [1 2 23; 2 3 14; 3 4 123; 4 5 111; 1 7 60];
T = accumarray(data(:,1:2), data(:,3), max(max(data(:,1:2))) );
T = T + T.';
The above handles the symmetry, except that if there are any arcs from a node to itself the cost value would be twice as high as it should be.

More Answers (1)

Azzi Abdelmalek
Azzi Abdelmalek on 15 Jun 2013
out=zeros(7)
out(1,2)=23
out(2,3)=14
out(3,4)=123
out(4,5)=111
out(1,7)=60

Community Treasure Hunt

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

Start Hunting!