Counting zeros in array
조회 수: 45 (최근 30일)
이전 댓글 표시
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?
채택된 답변
Adam Danz
2019년 5월 6일
편집: Adam Danz
2019년 5월 7일
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
참고 항목
카테고리
Help Center 및 File Exchange에서 Creating and Concatenating Matrices에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!