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

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