Cumulative Sum for Column of Ones and Zeros
3 次查看(过去 30 天)
显示 更早的评论
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 个评论
Jos (10584)
2017-12-5
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.
采纳的回答
Jos (10584)
2017-12-5
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 个评论
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Logical 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!