Counting zeros in array
83 visualizzazioni (ultimi 30 giorni)
Mostra commenti meno recenti
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?
Risposta accettata
Adam Danz
il 6 Mag 2019
Modificato: Adam Danz
il 7 Mag 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 Commenti
Vedere anche
Categorie
Scopri di più su Creating and Concatenating Matrices in Help Center e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!