Cumulative Sum for Column of Ones and Zeros
1 visualización (últimos 30 días)
Mostrar comentarios más antiguos
Kevin Zhang
el 5 de Dic. de 2017
Comentada: Ronni Isham
el 2 de En. de 2019
I have a column of ones and zeros, and I want to create a second column that takes a cumulative sum of the ones. When a 0 is encountered, the cumulative sum should go to zero, and repeat. For example,
A = [1 1 1 1 1 0 0 1 1]
B = [1 2 3 4 5 0 0 1 2]
Basically, I would like to count the number of consecutive zeros in the first column vector until a zero is reached, and then restart at the next group of ones. I need to output this as a column vector. I have tried using a for loop, but it takes minutes to calculate only a few rows and begins to return zeros after a few rows. Code is below (please excuse the inefficient way I have initialized the vectors):
T1 = [1:43801]'
Tdecl = zeros(size(T1));
UM = randi([0 1],43801,1)
for i = 1:43801
if UM(i)==1
Tdecl(i) = Tdecl(i)+1
else
Tdecl(i) = 0
end
end
1 comentario
Jos (10584)
el 5 de Dic. de 2017
You also need to take the previous element into account
if UM(1) == 1, Tdecl(1) = 1 ; end
for i=2:43801
if UM(i)==1,
Tdecl(i) = Tdecl(i-1) + 1 ;
end
end
but note that runindex (see my answer below) is much faster.
Respuesta aceptada
Jos (10584)
el 5 de Dic. de 2017
A perfect job for runindex:
A = [0 1 1 1 0 0 1 1 1 1 0 0 0 1 1 1 1 1 1 0]
B = runindex(A)
B(A==0) = 0
My function RUNINDEX can be downloaded from the File Exhchange:
The code is short and very fast, using a nice index trick and cumsum.
2 comentarios
Más respuestas (0)
Ver también
Categorías
Más información sobre Logical 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!