Keep pairs of corresponding elements in 2 vectors based on conditions
    10 Ansichten (letzte 30 Tage)
  
       Ältere Kommentare anzeigen
    
    fadams18
      
 am 14 Mär. 2023
  
    
    
    
    
    Bearbeitet: Dyuman Joshi
      
      
 am 16 Mär. 2023
            I have the problem here: Using this image below: I want to check for several conditions
the orange and green marks are annotations on a signal. If we consider vectors orange, and green which contain the points needed to make the annotations.
The point is to have perfect pairs and ignore all others. i.e. orange(i) and green(i) is a pair if orange(i)<green(i)
so all values in vector orange are lower than their corresponding elements in vector green.
I want to check the following conditions.
I started but some conditions dont work, thats why i need help.
Condition 1:  orange must always begin, so if a green begins I delete that green point. [done]
condition 2:  if 2 or more greens come before an orange, delete all unecessary green to keep a pair.
condition 3: similarly if several orange exist delete them to keep a pair.

so in the end I want to have a perfect system of pairs, where orange starts a pair. like this:

orange=[212929;213223;213482;213740;214013;214790];
green= [212765;213301;213822;214090;214240;214426;214941];
if green(1)<orange(1)
    green=green(2:end);
end
 lenss =min(length(orange),length(green));
i = 1;
while i <= lenss
    if abs(green(i)-orange(i)) <0
         green(i) = [];  
         i=1;
        continue;
    else
        i=1+1;  
        continue;
    end
end 
1 Kommentar
Akzeptierte Antwort
  Jan
      
      
 am 14 Mär. 2023
        
      Bearbeitet: Jan
      
      
 am 14 Mär. 2023
  
      orange = [212929;213223;213482;213740;214013;214790];
green  = [212765;213301;213822;214090;214240;214426;214941];
[x, s]    = sort([orange.', green.']);
index     = strfind(s <= numel(orange), [true, false]);
ok_orange = x(index)
ok_green  = x(index + 1)
The idea: sort all elements. If their sorting index is greater than the number of orange elements, they are green. So s <= numel(orange) is a logical vector, which is TRUE for orange and FALSE for green. Now find the neighboring [true, false] pairs.
5 Kommentare
  Dyuman Joshi
      
      
 am 16 Mär. 2023
				
      Bearbeitet: Dyuman Joshi
      
      
 am 16 Mär. 2023
  
			Wow, just shy of my time on this planet! 
What prompted you to try out MATLAB at that time and to stick with it for so long and continue using it? (If you don't mind me asking)
(I feel like this would be an interesting conversation to have with the MATLAB Answers community!)
Weitere Antworten (0)
Siehe auch
Kategorien
				Mehr zu Logical finden Sie in Help Center und File Exchange
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!


