如何加快单个矩阵的MATLAB knnsearch方法?

时间:2014-03-17 13:56:08

标签: matlab knn

我想在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

1 个答案:

答案 0 :(得分:0)

假设您的数据点没有重叠,您可以尝试使用“距离”#39; knnsearch()选项并定义自定义距离函数。在此距离函数中,您可以将零距离映射到无穷大或其他一些非常大的数字。这消除了使用for循环的需要,并且应该加快速度。

如果存在重叠,这个技巧仍然有效。您只需创建一个虚拟尺寸来标记点并将其包含在自定义距离函数中。

请参阅:http://www.mathworks.com/help/stats/knnsearch.html