我已经在Matlab中实现了k-medoids算法的自定义距离函数,遵循pdist中的指示。
基本上它会比较两个向量,比如A
和B
(也可以有不同的长度)并检查它们的元素是否“与容差共存”: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中的自定义距离函数?如果没有,我应该考虑哪些替代方案?
答案 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)