0

我从这里找到了使用欧几里德距离计算两个矩阵的距离的示例代码:Finding K-nearest neighbors and its implementation数据矩阵如下:

load fisheriris 
X = meas(:,3:4);
newpoints = [5 1.45; 7 2; 4 2.5; 2 3.5];

我将如何应用切比雪夫和马氏距离并替换以下函数:

%// Use Euclidean
dists = sqrt(sum(bsxfun(@minus, x, newpoint).^2, 2));

我试图将代码更改为:

dists = max(abs(bsxfun(@minus, X, newpoint)))

答案如下。可能是因为我根据公式放置了 max 函数。

dists2 =
      4.0000    1.3500

但是,如果我使用这个 knnsearch 代码,它会按预期工作。但是我需要应用 bsxfun 以便我的代码将使用上层代码进行标准化。我想比较算法中的不同距离:

[ncb,dcb] = knnsearch(X,newpoint,'k',10,'distance','chebychev')

感谢是否有人可以帮助我。

4

1 回答 1

0

你可以在这里找到我的答案的扩展版本:

https://de.mathworks.com/matlabcentral/answers/386963-how-to-write-code-the-chebyshev-and-mahalanobis-distance-using-bsxfun-function

精髓:

load fisheriris 
oldpoints = meas(:,3:4);
newpoints = [5 1.45; 7 2; 4 2.5; 2 3.5];
newpoints = permute(newpoints, [3,2,1]);
% Euclidean distance
dists_euclid = sqrt(sum(bsxfun(@minus, newpoints, oldpoints).^2, 2));
% Chebyshev distance
dists_cheby = max(abs(bsxfun(@minus, oldpoints, newpoints)),[],2);
于 2018-03-09T11:02:20.677 回答