在matlab中定义一个有效的距离函数

时间:2014-10-14 08:28:03

标签: matlab

我在matlab中使用kNN搜索功能,但我正在计算我自己定义的类的两个对象之间的距离,所以我写了一个新的距离函数。就是这样:

         function d = allRepDistance(obj1, obj2)
         %calculates the min dist. between repr.
         % obj2 is a vector, to fit kNN function requirements

            n = size(obj2,1);
            d = zeros(n,1);
            for i=1:n
                    M =  dist(obj1.Repr, [obj2(i,:).Repr]');
                    d(i) = min(min(M));
            end

     end

不同之处在于obj.Repr可能是一个矩阵,我想计算每个参数的所有行之间的最小距离。但即使obj1.Repr只是一个向量,它基本上给出了两个向量之间的正常欧几里德距离,kNN函数也慢了200倍!

我检查了距离函数的性能(没有kNN)。我测量了计算矢量和矩阵行之间的距离(当它们在物体中时)所花费的时间,并且它比正常距离函数慢了3倍。

这有什么意义吗?有解决方案吗?

1 个答案:

答案 0 :(得分:0)

您正在使用dist(),它对应于欧几里德距离权重函数。但是,您没有对数据进行加权,即您不认为某个维度比其他维度更重要。因此,您可以直接使用欧几里德距离pdist()

 function d = allRepDistance(obj1, obj2)
 % calculates the min dist. between repr.
 % obj2 is a vector, to fit kNN function requirements
    n = size(obj2,1);
    d = zeros(n,1);
    for i=1:n
        X = [obj1.Repr, obj2(i,:).Repr'];
        M = pdist(X,'euclidean');
        d(i) = min(min(M));
    end
end

顺便说一句,我不知道您的矩阵维度,因此您需要处理元素的串联才能正确创建X