MATLAB - 将参数传递给pdist自定义距离函数

时间:2016-03-04 14:06:06

标签: matlab cluster-analysis distance pdist

我已经在Matlab中实现了k-medoids算法的自定义距离函数,遵循pdist中的指示。

基本上它会比较两个向量,比如AB(也可以有不同的长度)并检查它们的元素是否“与容差共存”:A(i)和{{如果

,则与容差B(j)共同发生
tol

如果没有详细说明,如果“容忍共存”很少,距离就会很大。

如果我将abs( A(i) - B(j) ) <= tol 定义为函数内部的常量,那么一切都按预期工作,但现在我想将它作为参数传递给每当我调用k-medoids时。 pdist文档没有提到这种可能性:

  

使用@指定的距离函数:   D = pdist(X,@ distfun)。   距离函数必须是形式   d2 = distfun(XI,XJ),   取对应于X的单行的1×n向量XI和对应于X的多行的m2-by-n矩阵XJ作为参数.distfun必须接受具有任意行数的矩阵XJ。 distfun必须返回距离d2的m2-by-1向量,其第k个元素是XI和XJ之间的距离(k,:)。

那么,是否有可能以某种方式将参数传递给Matlab中的自定义距离函数?如果没有,我应该考虑哪些替代方案?

1 个答案:

答案 0 :(得分:3)

要回答您的一般问题,是的,您可以将自定义参数传递给自定义距离函数。你可以用这种方式定义distfun

a = 1; % Variable you want to pass to your function
distanceFunction = @(xi, xj)yourCustomDistanceFunction(xi, xj, a)

yourCustomDistanceFunction应接受默认参数作为前两个输入,然后最后一个输入是您自己的变量(不是pdist传递的)。

然后按以下方式将其提供给pdist

pdist(X, distanceFunction)