Using accumarray to sum all values associated with a given node

3 次查看(过去 30 天)
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
Matt J 2024-1-22
编辑:Matt J 2024-1-22
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=sum(adjacency(G,'weighted'),2)
out =
(1,1) 1.2640 (2,1) 1.1170 (3,1) 1.3340 (4,1) 0.6130 (5,1) 0.1180
  4 个评论
L'O.G.
L'O.G. 2024-1-22
Ah ok, I was just wondering if I could've used accumarray after all. Thank you!
Matt J
Matt J 2024-1-22
编辑:Matt J 2024-1-22
You could (see my other answer), but I'm pretty sure that's what the adjacency() command is already doing internally.

请先登录,再进行评论。

更多回答(1 个)

Matt J
Matt J 2024-1-22
编辑:Matt J 2024-1-22
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

类别

Help CenterFile Exchange 中查找有关 Data Distribution Plots 的更多信息

产品


版本

R2021b

Community Treasure Hunt

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

Start Hunting!

Translated by