how to sum by 2 indeces?
3 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Tiina
el 28 de En. de 2016
Editada: Andrei Bobrov
el 28 de En. de 2016
A=[1 1 1 1 1 1 2 2 2 2 2 2 3 3 3 3 3 3 3]';
b=[2 3 2]';
c=[9 8 7 6 4 3 4 4 4 5 3 5 1 2 3 4 5 6 7]';
out=[17 13 7 12 13 3 7 11 7]';
A is a unique index, b is a process signal that indicates summation blocks (in other words non-overlapping). The relationship between A and b is that for every unique A there is a unique B. c is data. out(1,1) = 17 because in A where index is 1, b is the first nonoverlapping sum for the first 2 observations 9+8 and so on. If there is one index then accumarray sums c according to unique in A. But this has 2 indeces A and b and an odd observation 7 at the end of the row because it remains without being summed up. How is out produced in this case?
0 comentarios
Respuesta aceptada
Andrei Bobrov
el 28 de En. de 2016
Editada: Andrei Bobrov
el 28 de En. de 2016
i0 = [true;diff(A)~=0];
ii = [find(i0);numel(A)+1];
for jj = 1:numel(b)
i0(ii(jj):b(jj):ii(jj+1)) = 1;
end
out = accumarray(cumsum(i0),c);
0 comentarios
Más respuestas (0)
Ver también
Categorías
Más información sobre Resizing and Reshaping Matrices en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!