Delete every n rows if less than x
    10 Ansichten (letzte 30 Tage)
  
       Ältere Kommentare anzeigen
    
    David du Preez
 am 2 Jun. 2017
  
    
    
    
    
    Beantwortet: Anushi1998
      
 am 2 Jun. 2017
            Hi I have a m x 14 matrix. I want to consider the first 24 rows. If the value in coulmn 5 in row 14 is less than x, then delete the first 24 rows. I want to repeat this for the rest of the matrix as well, considering 24 rows at a time
4 Kommentare
  Jan
      
      
 am 2 Jun. 2017
				@David: Please give us any useful details. Did you read the "Getting Started" chapters of the documentation already? Did you see Matlab's Onramp tutorials? Is m a multiple of 24? Do you know how to create a FOR loop?
Akzeptierte Antwort
  Jan
      
      
 am 2 Jun. 2017
        
      Bearbeitet: Jan
      
      
 am 2 Jun. 2017
  
      Assuming that m is a multiple of 24:
DataM  = reshape(Data, 24, [], 14);
Match  = (DataM(14, :, 5) >= x);
Result = reshape(DataM(:, Match, :), [], 14);
For teaching with a FOR loop:
Keep = true(1, size(Data, 1));
for k = 1:24:size(Data, 1)
  Keep(k:k+23) = (Data(k+4, 14) >= x);
end
Result = Data(Keep, :);
0 Kommentare
Weitere Antworten (2)
  Andrei Bobrov
      
      
 am 2 Jun. 2017
        Let A - your array [m x 14]
ii = ceil((1:m)'/24);
l0 = accumarray(ii,A(:,5) >= x,[],@all);
out = A(l0(ii),:);
0 Kommentare
  Anushi1998
      
 am 2 Jun. 2017
        Consider going from the end because this won't run your loop infinitely when the portion is not deleted.
Since we have to consider only segments of size 24*14 it won't affect whether we go from top to bottom or bottom to top.
 a=%array of size m * 14
 for ii=m:-24:24
   b=a(ii-23:ii,:);
   if(b(14,5)<x)
     a(ii-23:ii,:)=[];
   end
 end
0 Kommentare
Siehe auch
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!




