Counting zeros in array
71 views (last 30 days)
Show older comments
Hi everyone,
I have an array such as;
input = [1 -2 -1 -1 -1 0 0 -1 0 0 0 3 0 0 4 0 0 0 0 0]
By counting zeros and determining the value after zero, I want to create a new dimentional array such as;
output = [0 1; 0 -2; 0 -1; 0 -1; 0 -1; 2 -1; 3 3; 2 4; 4 0]
Each row of "output" array determines that [number of zeros before non zero element non zero element].
For example, [2 4] represents that there are 2 zeros before "4".
How can I create the "output" array based on this rule?
Accepted Answer
Adam Danz
on 6 May 2019
Edited: Adam Danz
on 7 May 2019
Loop method
input = [1 -2 -1 -1 -1 0 0 -1 0 0 0 3 0 0 4 0 0 0 0 0];
output = nan(numel(input),2);
for i = 1:numel(input)
if input(i)==0
continue
end
output(i,:) = [max(cumsum(input(1:i)==0)),input(i)];
input(1:i) = 1; %make sure all previous 0s are overwritten
end
% if input ended in 0, count the consecutive 0s minus 1 (which matches the example)
if input(end)==0
output(end,:) = [sum(input==0)-1,0];
end
% get rid of leftover output rows
output(isnan(output(:,1)),:) = [];
Without a loop
inputTemp = [1,input(1:end-1),1]; %make sure last digit is non-zero (for now)
cs = cumsum(inputTemp==0); %cumulative sum of 0-counts
zeroCounts = diff(cs(inputTemp~=0)); %count consecutive zeros
nonZeros = [input(input~=0 & 1:numel(input)<numel(input)),input(end)];
output = [zeroCounts', nonZeros'];
Result for both methods
output =
0 1
0 -2
0 -1
0 -1
0 -1
2 -1
3 3
2 4
4 0
5 Comments
See Also
Categories
Find more on Creating and Concatenating Matrices in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!