loop indexing length of non zeroes
    조회 수: 3 (최근 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에서 Matrix Indexing에 대해 자세히 알아보기
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!



