2015-11-04 259 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中 - 此索引對應於具有最小距離的羣集