2017-06-16 2 views
2

Ich habe 2 Arrays von Daten, aus denen ich gemeinsame Elemente extrahieren möchte. Matlabs intersect erledigt diesen Job. Aber es liefert Elemente, die genau gleich sind. Was, wenn ich Elemente mit einer gewissen Toleranz extrahieren möchte? Sprich für z.B.Schneiden Sie zwei Arrays mit Toleranz

A = [1 2 3.0002 4.125 5.89]; 
B = [2 3.012 4.126] 

Ich möchte Elemente extrahieren, die bis zu 2 Dezimalstellen gleich sind. Also möchte ich die Antwort [2 4.12] sein. Gibt es dafür eine eingebaute Funktion? Oder Wie erreiche ich das?

Antwort

4

würde ich nur round die Eingabe:

C = intersect(round(A,2),round(B,2)) 

floor und ceil gibt auch Optionen, je nachdem, was Sie wirklich wollen erreichen.

+0

Für Matlab-Versionen vor 2014b verwenden Sie 'C = schneiden (rund (A * 10^n)/10^n, rund (B * 10^n)/10^n)' wobei 'n' die Zahl ist Mit den Dezimalstellen möchten Sie, dass Ihre Elemente gleich sind. – Rhinocerotidae

4

Sie können es manuell wie folgt tun. Dies wählt die Ausgabewerte aus A; wenn Sie von B auswählen möchten tauschen nur A und B im Code:

A = [1 2 3.0002 4.125 5.89]; 
B = [2 3.012 4.126]; 
tol = .01; 
result = A(any(abs(bsxfun(@minus, A(:).', B(:))) < tol, 1));