在matlab中计算点之间的距离

时间:2015-11-04 11:11:23

标签: matlab k-means euclidean-distance

难以理解Matlab中的以下代码来计算两点之间的欧几里德距离,其中X是要分类的数据,标签对应于聚类成员。

label = ones(1, data_dim);
[N,~]=size(X);
[c,~]=size(clusters);
dist = zeros(N,c);
for i = 1:c
    dist(:,i) = sum(bsxfun(@minus, X, clusters(i,:)).^2, 2);
end

[~,label] = min(dist,[],2);

任何人都可以解释这里发生了什么,也许可以在不使用bsxfun的情况下从第一原则解释它吗?

1 个答案:

答案 0 :(得分:1)

  • for循环遍历clusters中的每一行。每行可能是该群集中一个点的坐标。
  • bsxfun(@minus, X, clusters(i,:)从X中的每一行中减去该特定群集行。换句话说,它会输出一个矩阵,其中第一行为X(1,:) - clusters(i,:),第二行为X(2,:) - clusters(i,:),等等。这就像从X中的每个点到特定群集点i的方向向量。
  • 每个值都是平方(.^2),然后沿着每一行(sum(...,2))求和。这将为您提供一个列向量,其中包含从X中的每个点到群集点的欧几里德距离的平方。这存储在矩阵'dist'中,因此它包含从X中的每个点到clusters
  • 中每个点的距离的平方
  • min(dist,[],2)命令在dist的每列上找到这些值的最小值,即它找到x中每个点的最小距离。但是,忽略实际值,而是将索引存储在label中 - 此索引对应于具有最小距离的群集