我想计算矩阵中除自身以外的每一列与其他列之间的平均距离。
我写了这段代码:
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)
我想知道如何为这些度量定义距离函数?
编辑:目的是根据经验得出值开始减小但数字未显示此点的点...
答案 0 :(得分:0)
您要将两个列向量传递到pdist2
中,因此我们可以将上述等式实现为一个匿名函数,该函数接受向量输入...
fCanberraDist = @(p,q) sum( abs(p - q) ./ ( abs(p) + abs(q) ) );
现在您具有函数句柄,可以使用以下内容:
% ... previous code
d = pdist2( a(:,i), a(:,j), fCanberraDist );
% ... further code
请注意,您目前尚未对结果进行任何处理,我假设这只是出于示例代码的目的。
您可以类似的方式定义其他任何自定义距离度量,作为匿名函数或完全独立的函数(在其自己的.m文件中或在本地定义)。