MATLAB - 将参数传递给pdist自定义距离函数
问题描述:
我已经在Matlab中实现了k-medoids算法的自定义距离函数,遵循pdist中的指示。MATLAB - 将参数传递给pdist自定义距离函数
基本上它比较两个向量,比方说A
和B
(其也可以具有不同的长度),并检查是否它们的元素“与公差同时出现”: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中的自定义距离函数?如果不是,我应该考虑哪些替代方案?
答
要回答您的一般问题,是的,您可以将自定义参数传递给您的自定义距离功能。您可以通过这种方式
a = 1; % Variable you want to pass to your function
distanceFunction = @(xi, xj)yourCustomDistanceFunction(xi, xj, a)
yourCustomDistanceFunction
应该接受默认参数,前两个输入定义distfun,然后最后的输入是你自己的变量(即不被pdist
传递)。
然后将其提供给pdist
以下列方式
pdist(X, distanceFunction)
“为什么不只是'ABS(bsxfun(@minus,A(:),B(:)。))
我把k-medoids称为'[idx,C] = kmedoids(data,2,'Distance',@ custom_distance);'。我想传递给'tol'的值为'custom_distance'。 (距离本身起作用,我用'ismembertol')。现在,我只是在'custom_distance'中指定'tol'作为常量。 – DanieleT