distance between array entries

2 visualizaciones (últimos 30 días)
amateurintraining
amateurintraining el 29 de Nov. de 2017
Comentada: Andrei Bobrov el 29 de Nov. de 2017
How do you write code to get which of the entries stored in an array it is closest to for each data point?
For example:
array: [4 9 7 3 10 19 2 11]
and you want to find which entry each entry is closest to. So, in the above array, the answer would be:
[4 5 2 1 2 8 4 5]
(the number 4 is closest in value to the 4th entry in the array...the number 9 is closest in value to the 5th entry in the array...etc.)
  1 comentario
Jos (10584)
Jos (10584) el 29 de Nov. de 2017
You should define " closest" more accurately! Why is 9 closer to 10 rather than 11? And I would argue that any number is closest to itself, so 1:8 would be my answer ;)

Iniciar sesión para comentar.

Respuestas (3)

KSSV
KSSV el 29 de Nov. de 2017
Editada: KSSV el 29 de Nov. de 2017
Read about knnsearch.
A = [4 9 7 3 10 19 2 11] ;
B = [4 5 2 1 2 8 4 5] ;
idx = knnsearch(A',A','k',2) ;
iwant = idx(:,2)

Andrei Bobrov
Andrei Bobrov el 29 de Nov. de 2017
a = [4 9 7 3 10 19 2 11];
[~,iout] = min(abs(a(:)-a(:)')+diag(nan(numel(a),1)),[],2);

Roger Stafford
Roger Stafford el 29 de Nov. de 2017
Let 'a' be your array (row vector.)
n = size(a,2);
[t,p] = sort(a);
q = 1:n; q(p) = q;
t = diff(t);
t = [inf,t;t,inf];
[~,r] = min(t);
r = (1:n)+2*r-3;
p = p(r(q)); % p is the desired result

Categorías

Más información sobre Large Files and Big Data en Help Center y File Exchange.

Etiquetas

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by