2016-03-04 380 views
1

我已經在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(:)。))<= tol'?你想要什麼確切的結果? –

+0

我把k-medoids稱爲'[idx,C] = kmedoids(data,2,'Distance',@ custom_distance);'。我想傳遞給'tol'的值爲'custom_distance'。 (距離本身起作用,我用'ismembertol')。現在,我只是在'custom_distance'中指定'tol'作爲常量。 – DanieleT

回答

2

要回答您的一般問題,是的,您可以將自定義參數傳遞給您的自定義距離功能。您可以通過這種方式

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

yourCustomDistanceFunction應該接受默認參數,前兩個輸入定義distfun,然後最後的輸入是你自己的變量(即不被pdist傳遞)。

然後將其提供給pdist以下列方式

pdist(X, distanceFunction)