How to find minimal distance between elements?
139 views (last 30 days)
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.
More Answers (5)
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-
Image Analyst on 9 Mar 2018
If the "vector" is actually a matrix of (x,y) locations, you can use pdist2(). Let me know if that's the case and I'll give you an example.
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.