Elements of a vector whose difference is minimum?

2 visualizzazioni (ultimi 30 giorni)
Is it possible to find the elements of a vector whose difference is minimum?

Risposta accettata

Matt J
Matt J il 6 Ott 2016
Modificato: Matt J il 6 Ott 2016
If v is the given vector,
N=length(v);
G=abs(bsxfun(@minus,v(:),v(:).'));
G(1:N+1:end)=nan;
[i,j]=find(G==min(G(:)));
v(i), v(j)
  1 Commento
LauraLee Austin
LauraLee Austin il 6 Ott 2016
Matt J, I like your approach, but it's missing a step which removes the difference of itself (i.e. element 2 minus element 2 equals 0)
G=abs(bsxfun(@minus,v(:),v(:).'));
a = 1:1+length(v):numel(G);
G(a) = NaN;
[i,j]=find(G==min(G(:)));

Accedi per commentare.

Più risposte (1)

Matt J
Matt J il 6 Ott 2016
Modificato: Matt J il 6 Ott 2016
If v is the given vector,
N=length(v);
idx=nchoosek(1:N,2);
I=idx(:,1); J=idx(:,2);
D = abs( v(I) - v(J) );
imin = D==min(D);
v(I(imin)) , v( J(imin) )
Note that I, J can be re-used for further input vectors, v, that are the same length, N.

Community Treasure Hunt

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

Start Hunting!

Translated by