2011-11-11 14 views

risposta

4

Che ne dici di min(abs(data - b))?

+8

Non dimenticare abs ... – madth3

9

se i dati vengono ordinati È possibile utilizzare Trova:

i_lower = find(data <= b,1,'last'); 
i_higher = find(data >= b,1,'first'); 

lower_than_b = data(i_lower) 
higher_than_b = data(i_higher) 
20

Ecco un altro metodo. Il vettore data non deve essere ordinato e b può essere positivo o negativo.

[~,I] = min(abs(data-b)); 
c = data(I); 
0
data = [1 1.2 1.3 1.5 1.8] 

b = 1.23 

find(abs(data-b)==min(abs(data-b))) 
+1

Questo non aggiunge nulla di più di quello che è già stato inserito in questo post come risposta. – rayryeng

1

Questo metodo generalizza la risposta di dubbio al caso in cui ci sono più elementi in b che stai cercando per:

ind=knnsearch(data',b) c=data(ind)

che restituisce l'indice (o serie di indici) , ind, dell'elemento (o degli elementi) più vicino in data agli elementi elencati in b.

Si noti che i dati vengono trasposti perché l'insieme da cercare deve essere un vettore di colonna. Se si hanno più elementi allora dovrebbe anche essere un vettore colonna.

Inoltre, questo metodo può essere generalizzato per fornire 2, 3, 4 ... vicini più vicini (consultare la documentazione).

Si generalizza anche al caso in cui i dati sono di dimensione superiore (Se d dimensioni quindi test e b avrebbero d colonne).

Problemi correlati