cumulative sum that restarts whenever it reaches certain level

4 views (last 30 days)
Good evening I have a matrix A of 250*3 what i try to do is the following: the first time that the cumsum "of raws" is > 6, i replace the corresponding value in matrix A with zero and restart the cumsum form the value after the zero. then we repeat this once more: the first time the new cumsum >6 we replace it with zero and restart the cum sum we repeat this untill we arrive to the last raw of the matrix
Thank u in advance

Accepted Answer

Sean de Wolski
Sean de Wolski on 14 Oct 2014
rng default
x = randi(3,[20 1]);
thresh = 6;
while 1
xc = cumsum(x);
k = find(xc > thresh,1,'first');
if isempty(k)
% done
break
end
x(k) = -xc(k-1);
end
When you say set that row equal to zero, the cumsum on the next row will still be greater than 6. (something greater than 6 + 0 is still greater than 6). Thus you need to set the value to the negative of the previous value in order to reset the cumulative sum. If you need zeros at the end, remove the negatives.
% If you need to zero out those points
x(x<0) = 0
  1 Comment
Amanda S
Amanda S on 24 May 2020
Where in the code is the command that says to replace the number that comes next in the cumsum that is greater than 6, with a zero? Im doing a similiar thing but i also want to include the number that in this case, is replaced with a zero, but I don't know how. I believe that the change need to be done in the second row from the bottom but I cant seem to get it to work my way.

Sign in to comment.

More Answers (0)

Community Treasure Hunt

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

Start Hunting!