我已經在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中的自定義距離函數?如果不是,我應該考慮哪些替代方案?
「爲什麼不只是'ABS(bsxfun(@minus,A(:),B(:)。))<= tol'?你想要什麼確切的結果? –
我把k-medoids稱爲'[idx,C] = kmedoids(data,2,'Distance',@ custom_distance);'。我想傳遞給'tol'的值爲'custom_distance'。 (距離本身起作用,我用'ismembertol')。現在,我只是在'custom_distance'中指定'tol'作爲常量。 – DanieleT