how to sum by 2 indeces?

2 Ansichten (letzte 30 Tage)
Tiina
Tiina am 28 Jan. 2016
Bearbeitet: Andrei Bobrov am 28 Jan. 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?

Akzeptierte Antwort

Andrei Bobrov
Andrei Bobrov am 28 Jan. 2016
Bearbeitet: Andrei Bobrov am 28 Jan. 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);

Weitere Antworten (0)

Kategorien

Mehr zu Resizing and Reshaping Matrices finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by