如何在 matlab 中使用 bsxfun 函数编写切比雪夫和马哈拉诺比斯距离的代码?



我找到了使用欧氏距离计算两个矩阵距离的示例代码: 查找 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);

相关内容

  • 没有找到相关文章

最新更新