如何根据测度计算两个向量之间的距离?

时间:2019-01-02 21:59:45

标签: matlab matrix euclidean-distance

我想计算矩阵中除自身以外的每一列与其他列之间的平均距离。

我写了这段代码:

For i=1:m
  For j=1:m-1
    If(i==j)
      d=0;
    Else
      d=pdist2(a(:,i),a(:,j),'jaccard');
      s=sum(d)/(m-1);
    End
  End
End

矩阵为nxm。

我知道pdist2函数支持一些距离度量,例如jaccard,余弦,汉明,欧几里得...

但是,如果我想计算堪培拉或克拉克距离测度或类似的测度,我应该这样在pdist2中定义一个函数:

D=pdist2(x,y,@distfun) 

我想知道如何为这些度量定义距离函数?


编辑:目的是根据经验得出值开始减小但数字未显示此点的点...

enter image description here

1 个答案:

答案 0 :(得分:0)

Canberra Distance被定义为

equation

您要将两个列向量传递到pdist2中,因此我们可以将上述等式实现为一个匿名函数,该函数接受向量输入...

fCanberraDist = @(p,q) sum( abs(p - q) ./ ( abs(p) + abs(q) ) );

现在您具有函数句柄,可以使用以下内容:

% ... previous code
d = pdist2( a(:,i), a(:,j), fCanberraDist );
% ... further code

请注意,您目前尚未对结果进行任何处理,我假设这只是出于示例代码的目的。

您可以类似的方式定义其他任何自定义距离度量,作为匿名函数或完全独立的函数(在其自己的.m文件中或在本地定义)。