How to find k nearest vectors from a given vector in 3 dimensions ?

2 次查看(过去 30 天)
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 个评论
Walter Roberson
Walter Roberson 2015-5-16
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?

请先登录,再进行评论。

采纳的回答

Star Strider
Star Strider 2015-5-16
编辑:Star Strider 2015-5-16
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.

更多回答(1 个)

Walter Roberson
Walter Roberson 2015-5-16
If "reference vector" is a line then according to Roger Stafford over here
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.

Community Treasure Hunt

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

Start Hunting!

Translated by