How to find k nearest vectors from a given vector in 3 dimensions ?
3 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
naman
am 16 Mai 2015
Beantwortet: Walter Roberson
am 16 Mai 2015
I have a reference vector and I want to find a fixed k nearest neighbors from a matrix ? How can I do it? Is there any direct way?
1 Kommentar
Walter Roberson
am 16 Mai 2015
When you say "reference vector", do you mean a line defined in N-dimensional space? And you want to find the k points that lie nearest to the line using Euclidean distance? Or does "reference vector" just mean an N-dimensional point and you want to find its k nearest neighbours using a distance measure you have not specified, possibly Euclidean distance?
Akzeptierte Antwort
Star Strider
am 16 Mai 2015
Bearbeitet: Star Strider
am 16 Mai 2015
This is one way:
V = randi(50, 1, 3); % Vector
M = randi(50, 15, 3); % Matrix
%
dif = bsxfun(@minus, V, M); % Subtract Vector from Matrix
D = sqrt(sum(dif.^2,2)); % Euclidean Distance Metric
[Ds,Ix] = sort(D,'ascend'); % Sort Ascending
k = 5; % Number Of Neighbours
KNN = M(Ix(1:k),:); % K-th Nearest Neighbours
This simply finds them. If you have the Statistics Toolbox, the pdist2 function is likely more efficient.
0 Kommentare
Weitere Antworten (1)
Walter Roberson
am 16 Mai 2015
Let Q1 and Q2 be any two distinct points of the line and P the point in question, then
d = norm(cross(Q2-Q1,P-Q1))/norm(Q2-Q1);
will give the requested orthogonal distance.
0 Kommentare
Siehe auch
Kategorien
Mehr zu Statistics and Machine Learning Toolbox finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!