# Using accumarray to sum all values associated with a given node

1 view (last 30 days)
L'O.G. on 22 Jan 2024
Edited: Matt J on 22 Jan 2024
Given a graph with the following edges
edges = [1 2; 2 3; 3 1; 2 4; 4 5; 4 1];
I have some data associated with each edge
data=[0.276
0.679
0.655
0.162
0.118
0.333];
For a given node, I want to sum the data values corresponding to all edges it's connected to. How do I do this? accumarray looks promising, but this gives six nonzero values, when there should just be 5 (and I don't know how to distinguish which one corresponds to which node).
sum_data = accumarray(edges,data);

Matt J on 22 Jan 2024
Edited: Matt J on 22 Jan 2024
One way:
edges = [1 2; 2 3; 3 1; 2 4; 4 5; 4 1];
data=[0.276
0.679
0.655
0.162
0.118
0.333];
G=graph(edges(:,1), edges(:,2), data);
out =
(1,1) 1.2640 (2,1) 1.1170 (3,1) 1.3340 (4,1) 0.6130 (5,1) 0.1180
L'O.G. on 22 Jan 2024
Ah ok, I was just wondering if I could've used accumarray after all. Thank you!
Matt J on 22 Jan 2024
Edited: Matt J on 22 Jan 2024
You could (see my other answer), but I'm pretty sure that's what the adjacency() command is already doing internally.

Matt J on 22 Jan 2024
Edited: Matt J on 22 Jan 2024
edges = [1 2; 2 3; 3 1; 2 4; 4 5; 4 1];
data=[0.276
0.679
0.655
0.162
0.118
0.333];
m=max(edges(:));
A=accumarray(edges,data,[m,m],[],0,1);
out=sum(A+A.',2) %assume it's a non-directed graph
out =
(1,1) 1.2640 (2,1) 1.1170 (3,1) 1.3340 (4,1) 0.6130 (5,1) 0.1180

### Categories

Find more on Data Distribution Plots in Help Center and File Exchange

R2021b

### Community Treasure Hunt

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

Start Hunting!