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

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

问题描述:

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

基本上它比较两个向量,比方说AB(其也可以具有不同的长度),并检查是否它们的元素“与公差同时出现”:A(i)B(j)与公差tol如果共同出现

abs(A(i) - B(j)) <= tol 

没有详细说明,如果“容差的共现”很少,则距离很大。

如我在函数中定义tol作为常量,一切都按我期望的方式工作,但是现在我想在每次调用k-medoids时将它作为参数传递。 pdist文档没有提到这种可能性: d = pdist(X,@ distfun):

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

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

+0

“为什么不只是'ABS(bsxfun(@minus,A(:),B(:)。))

+0

我把k-medoids称为'[idx,C] = kmedoids(data,2,'Distance',@ custom_distance);'。我想传递给'tol'的值为'custom_distance'。 (距离本身起作用,我用'ismembertol')。现在,我只是在'custom_distance'中指定'tol'作为常量。 – DanieleT

要回答您的一般问题,是的,您可以将自定义参数传递给您的自定义距离功能。您可以通过这种方式

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

yourCustomDistanceFunction应该接受默认参数,前两个输入定义distfun,然后最后的输入是你自己的变量(即不被pdist传递)。

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

pdist(X, distanceFunction)