Find closest value in array
3,444 次查看（过去 30 天）
评论： Adrian Aquino Arriaga ，2021-10-8
I have two vector(which are time stamps) like,
My goal is to find closest time in N with respect to V (i.e. find time in N which is nearly equal with V). My frame is W = 1e4, furthermore V should lies between N-W and N+W. So how do I get closest time through MATLAB? Any help would be appreciated.
Joe S 2018-9-10
编辑：MathWorks Support Team 2018-11-27
To compute the closest value in a vector “N” for each element of “V”, try the following code with example vectors “N” and “V”:
V = randi(10,[5 1])
N = randi(10,[5 1])
A = repmat(N,[1 length(V)])
[minValue,closestIndex] = min(abs(A-V’))
closestValue = N(closestIndex)
Note that if there is a tie for the minimum value in each column, MATLAB chooses the first element in the column.
Adrian Aquino Arriaga 2021-10-8
Great answer. I would only use dot-apostrophe (.') instead of only apostrophe to make sure you are taking the non-conjugate transpose. Of course, this is only relevant if you are working with complex numbers.
Andrew Reibold 2014-8-25
编辑：Andrew Reibold 2014-8-25
This finds the value in N which is closest to the V value I am calling.
N = [1990 1998 2001 2004 2001]
V = [2000 2011 2010 2001 1998]
[c index] = min(abs(N-V(1)))
In this case Im looking for the closest value to 'V(1)' which is 2000. It should return the 3rd or 5th value of N which is 2001.
Note: 'index' is the index of the closest value. If two are the same, like in this example with two different '2001's, it will return the index of the first one.
Image Analyst 2018-2-17
reetu, if N is just a single number then you can do this
[minDistance, indexOfMin] = min(abs(V-N));
Image Analyst 2014-8-25
How about this:
% Sample data
numberOfRows = 5;
V = rand(numberOfRows, 1)
N = rand(numberOfRows, 1)
% Find min distance
minDistance = inf;
for ni = 1 : numberOfRows
for vi = 1 : numberOfRows
distances(vi, ni) = abs(N(ni) - V(vi));
if distances(vi, ni) < minDistance
minNRow = ni;
minVRow = vi;
minDistance = distances(vi, ni);
% Report to command window:
fprintf('Closest distance is %f which occurs between row %d of N and row %d of V\n',...
minDistance, minNRow, minVRow);
In the command window:
0.4378 0.0005 0.2057 0.4252 0.0801
0.3142 0.1231 0.3293 0.5488 0.0435
0.5610 0.1237 0.0825 0.3020 0.2033
0.1487 0.2886 0.4948 0.7144 0.2090
0.2503 0.1870 0.3932 0.6127 0.1074
Closest distance is 0.000470 which occurs between row 2 of N and row 1 of V
Eswar Aravind Swamy Adari 2019-5-1
I have a matrix A of size [30x36] and B of size [38x36]. How do I find the closest pairs?
FYI- Those are the HOG Descriptors of block size 16x16 and cell size 8x8. I am trying to find the closest HOG descriptors.
Thanks in advance.
Find more on Creating and Concatenating Matrices 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!