Filter löschen
Filter löschen

cumulative sum that restarts whenever it reaches certain level

7 Ansichten (letzte 30 Tage)
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

Akzeptierte Antwort

Sean de Wolski
Sean de Wolski am 14 Okt. 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 Kommentar
Amanda S
Amanda S am 24 Mai 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.

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Mehr zu Matrix Indexing 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