2017-01-12 9 views
1

ich eine Tabelle mit zwei Spalten gegeben bin - man ist P_in und der andere P_out:Wie find() zu verwenden, in MATLAB, um Dezimalstellen zu finden

P_in = table(:,1); 
P_out = table(:,2); 

ich auch eine Teilmenge von P_in gegeben werde, die Ich rufe P_in2 an. Ich möchte den entsprechenden Wert von P_out finden, der zu P_in2 gehört.

Ich habe versucht, find():

P_out2_idx = find(table(P_in2,2)); 
P_out2  = table(P_out2,idx,2); 

Aber finden() kann nur mit ganzen Zahlen umgehen. Meine Tabelle zeigt jedoch keine Ganzzahlen, sondern Dezimalzahlen. Hier sind drei Zeilen aus der Tabelle:

-13.02 49.6 
-12.52 49.9 
-12.02 50.18 

So würde sogar die Rundung der P_in2 Werte nicht funktionieren.

+0

Können Sie uns zeigen, wie 'P_in2' definiert ist? – obchardon

Antwort

2

Verwenden Sie ismember ist gut zum Finden mehrerer Indizes, wenn Ihre Zahlen Ganzzahlen sind. Für Gleitkommazahlen eine sicherere Art und Weise wird unter Verwendung von ismembertol:

isInP_in2 = ismembertol(P_in, P_in2, eps); 
P_out2 = P_out(isInP_in2); 

Das zurückgegebene Array isInP_in2 ist eine logische Array der Größe P_in, die true an den Indizes in der Werte in P_in2 gefunden werden, und false anderweitig.

Das dritte Argument ist die Toleranz für Vergleiche (hier nehmen wir die relative Genauigkeit der Gleitkommazahl eps). Zum Beispiel für einen einzelnen Index Suche find mit getan werden würde:

idx = find(abs(P_in - P_in2(1)) < eps); 
+0

wäre es möglich zu sagen: isInP_in2 = Ismembertol (P_in -3, P_in2, eps); ? Um alle Werte von P_in2 zu finden, die in P_in - 3 sind? –

+0

Ja, das sollte funktionieren. Nur um klar zu sein: Sagen Sie, Sie haben 'P_in = [1 2 3]' und 'P_in2 = [- 2 -4]', wollen Sie die Indizes '[1 3]' 'finden? – buzjwa

+0

Wenn P_in = [1 2 3] und P_in2 = [- 2 -4], möchte ich Index 1 finden, weil P_in (1) -3 = -2. Wenn P_in = [1 2 3] und P_in2 = [- 2 1 0], möchte ich Indizes 1 und 3 finden, weil P_in (1) -3 = -2 und P_in (3) -3 = 0. –

Verwandte Themen