loop indexing length of non zeroes
조회 수: 1 (최근 30일)
이전 댓글 표시
Hi, I'm trying to make a loop that finds the length of a sequence of numbers:
I want to find when x(:,4) is not equal to zero, and then find how long it's is the same number, I want to save the number and the start row, and the end row.
my output should look something like this:
Id start end length
10 1320 1331 11
9 1352 1354 3
thanks for any help
댓글 수: 3
답변 (2개)
Adam Danz
2019년 6월 3일
편집: Adam Danz
2019년 6월 4일
Here are the steps needed to build your table.
% Create fake data that looks like your example
x = rand(2000,5);
x(:,4) = 0;
x(1320:1331,4) = 10;
x(1352:1354,4) = 9;
% calculate table components
isZero = x(:,4)==0;
dz = [0;diff(isZero)];
start = find(dz == -1); %start column
endIdx = find(dz == 1)-1; %end column
ID = x(start,4); %ID column
len = endIdx - start; %Length column
% Create table
T = table(ID,start,endIdx,len,'VariableNames', {'Id','start','endIdx','length'});
Result
T =
2×4 table
Id start endIdx length
__ _____ ______ ______
10 1320 1331 11
9 1352 1354 2
* Note that 'end' is not a valid variable name nor a valid table column name.
댓글 수: 0
Steven Lord
2019년 6월 3일
You can use the ischange function to identify abrupt changes in your data (the jump from 0 to 10 and the drop from 10 back down to 0.)
댓글 수: 0
참고 항목
카테고리
Help Center 및 File Exchange에서 Loops and Conditional Statements에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!