Using accumarray to sum all values associated with a given node

2 visualizaciones (últimos 30 días)
L'O.G.
L'O.G. el 22 de En. de 2024
Editada: Matt J el 22 de En. de 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);

Respuesta aceptada

Matt J
Matt J el 22 de En. de 2024
Editada: Matt J el 22 de En. de 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=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 comentarios
L'O.G.
L'O.G. el 22 de En. de 2024
Ah ok, I was just wondering if I could've used accumarray after all. Thank you!
Matt J
Matt J el 22 de En. de 2024
Editada: Matt J el 22 de En. de 2024
You could (see my other answer), but I'm pretty sure that's what the adjacency() command is already doing internally.

Iniciar sesión para comentar.

Más respuestas (1)

Matt J
Matt J el 22 de En. de 2024
Editada: Matt J el 22 de En. de 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

Categorías

Más información sobre Graph and Network Algorithms en Help Center y File Exchange.

Productos


Versión

R2021b

Community Treasure Hunt

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

Start Hunting!

Translated by