我找到了使用欧氏距离计算两个矩阵距离的示例代码: 查找 K 最近邻及其实现 数据矩阵如下:
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')
如果有人可以帮助我,我们将不胜感激。
你可以在这里找到我的答案的扩展版本:
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);