How to sum repeated adjacent values in a vector

6 Ansichten (letzte 30 Tage)
Galgool
Galgool am 27 Apr. 2019
Kommentiert: Galgool am 28 Apr. 2019
Hi guys,
I have a random vector with -1 and 1.
for example:
X = [1, 1, -1, 1, 1, 1, -1, -1, 1, -1, 1, 1, 1, 1, -1, -1]
I wish to creat a vector that sums repeated adjacent values.
so for the above example:
Y = [2, -1, 3, -2, 1, -1, 4, -2]
any idea?

Antworten (1)

Cedric
Cedric am 27 Apr. 2019
Bearbeitet: Cedric am 27 Apr. 2019
Here is one way:
Y = splitapply( @sum, X, [0, cumsum( diff(X) ~= 0 )] + 1 ) ;
or, split into two expressions that make it easier to understand:
groupId = [0, cumsum( diff(X) ~= 0 )] + 1 ;
Y = splitapply( @sum, X, groupId ) ;
  2 Kommentare
Andrei Bobrov
Andrei Bobrov am 27 Apr. 2019
+1.
accumarray(cumsum(diff([0;X(:)])~=0),X(:));
Galgool
Galgool am 28 Apr. 2019
it does the job. thanks.

Melden Sie sich an, um zu kommentieren.

Kategorien

Mehr zu Interactive Control and Callbacks finden Sie in Help Center und File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by