# How to find minimal distance between elements?

81 views (last 30 days)

Show older comments

##### 1 Comment

Image Analyst
on 10 Mar 2018

### Accepted Answer

Roger Stafford
on 9 Mar 2018

Edited: Roger Stafford
on 9 Mar 2018

Let your vector be called v. Then do this:

d = min(diff(sort(v)));

This finds the minimum distance between any two elements of v, but it does not show the points in v where that occurs. To do that requires the use of the index returned as a second output of the 'sort' function as well as an index from the 'min' function. Let us know if that is what you want.

##### 2 Comments

### More Answers (5)

Jos (10584)
on 9 Mar 2018

Without creating a possibly large intermediate N-ny-N matrix or using a possibly slow sort

V = [1 8 6 4 2 10] ;

W = nchoose2(V) % all pairs of distinct elements

D = abs(W(:,2)-W(:,1)) % distance between pairs

[minD, ix] = min(D) % minD = 1

minPair = W(ix,:) % minPair = [1 2]

nchoose2 is a fast function to get all combinations of two elements, and can be downloaded from the Matlab File Exchange: https://uk.mathworks.com/matlabcentral/fileexchange/20144-nchoose2-x-

##### 0 Comments

Image Analyst
on 9 Mar 2018

##### 3 Comments

Von Duesenberg
on 9 Mar 2018

This will get you started:

dumVect = [1 3 5 30]';

[minVal, idxMin] = min(diff(dumVect))

If you work with more dimensions, you may want to use pdist instead of diff. And of course, I'll let you figure out how you want to handle ties.

##### 2 Comments

Jan
on 9 Mar 2018

Edited: Jan
on 10 Mar 2018

n = 10;

v = rand(1, n);

dist = abs(v - v.'); % Auto-expand since R2016b

dist(1:(n+1):end) = Inf; % Mask the zeros [EDITED]

% dist = bsxfun(@minus, v, v.') .^ 2; % For older versions

[minValue, minIndex] = min(dist(:));

##### 4 Comments

Jan
on 15 Mar 2018

@Mr M.: You can simply try it.

v = rand(2,3)

v.'

It is the transpose operator. The quote without the dot before replies the conjugate complex value in addition.

Jos (10584)
on 9 Mar 2018

Edited: Jos (10584)
on 9 Mar 2018

By definition the minimum distance is zero because v(i)==v(i) for any element i of the vector v.

But I assume you want the minimum distance between v(i) and v(j) for all pairs (i,j) where i is unequal to j, but forgot to mention that ... :p

### See Also

### Categories

### Community Treasure Hunt

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

Start Hunting!