Clear Filters
Clear Filters

Elements of a vector whose difference is minimum?

2 views (last 30 days)
Is it possible to find the elements of a vector whose difference is minimum?

Accepted Answer

Matt J
Matt J on 6 Oct 2016
Edited: Matt J on 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 Comment
LauraLee Austin
LauraLee Austin on 6 Oct 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(:)));

Sign in to comment.

More Answers (1)

Matt J
Matt J on 6 Oct 2016
Edited: Matt J on 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.

Categories

Find more on Tables in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!