matlab中点间距的计算

matlab中点间距的计算,matlab,k-means,euclidean-distance,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); 有人能解释一下这里发生

很难理解以下在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
就可以从第一原理来解释吗?

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