2015-11-04 205 views
-3

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

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
  • 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中 - 此索引对应于具有最小距离的群集