我想在MATLAB中使用knnsearch
方法来查找最近的节点。我有一个2000×200
矩阵,每行都是一个节点,这意味着有2000
个节点,每个节点都有200
个属性。我想在这个矩阵中找到每个节点最近的节点(节点本身不包括在内),但我找不到一种有效的方法来实现这一点。
这是我的这个问题的代码,现在非常慢(我使用循环,这使得它非常慢,但我无法找到更好的方法......):
function [N,time] = KNN(X)
tic;
[height,width] = size(X);
N = zeros(height,1);
for i = 1:height
k = knnsearch(X([1:i-1 i+1:height],:),X(i,:));
if k<i
N(i,1) = k;
else
N(i,1) = k+1;
end
end
time = toc;
end
答案 0 :(得分:0)
假设您的数据点没有重叠,您可以尝试使用“距离”#39; knnsearch()选项并定义自定义距离函数。在此距离函数中,您可以将零距离映射到无穷大或其他一些非常大的数字。这消除了使用for循环的需要,并且应该加快速度。
如果存在重叠,这个技巧仍然有效。您只需创建一个虚拟尺寸来标记点并将其包含在自定义距离函数中。