Elements of a vector whose difference is minimum?

 Réponse acceptée

Matt J
Matt J le 6 Oct 2016
Modifié(e) : Matt J le 6 Oct 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 commentaire

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(:)));

Connectez-vous pour commenter.

Plus de réponses (1)

Matt J
Matt J le 6 Oct 2016
Modifié(e) : Matt J le 6 Oct 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