2017-03-15 124 views
1

我有一個包含5個點的幾何座標的矩陣。沒有循環的矩陣操作

centroids = [x1,x2;...;x5,y5] 

我想建立一個包含所有其他點的距離的矩陣。

distance = 

    inf   pt1-pt2  pt1-pt3  pt1-pt4  pt1-pt5 
    pt2-pt1  inf   pt2-pt3  pt2-pt4  pt2-pt5 
    pt3-pt3  pt3-pt2  inf   pt3-pt4  pt3-pt5 
    pt4-pt1  pt4-pt2  pt4-pt3  inf   pt4-pt5 
    pt5-pt1  pt5-pt2  pt5-pt3  pt5-pt4  inf 

我使用INF因爲然後我想坐分鐘,每行的索引[值,指數] =分鐘(距離(.....))。

的OBJECTIF是有這樣一個最終的矩陣:

result = 
    indice_of_the_closest  dist 
    indice_of_the_closest  dist 
    indice_of_the_closest  dist 
    indice_of_the_closest  dist 
    indice_of_the_closest  dist 

我實現一個循環做到這一點,但我需要一些幫助,這樣做沒有循環。

問候

回答

3

如果沒有統計工具箱,你可以做這樣的事情

% Compute the pair-wise distances 
d = sqrt((x(:,1) - x(:,1).').^2 + (x(:,2) - x(:,2).').^2); 

% If you are on MATLAB < 2016b 
% d = sqrt(bsxfun(@minus, x(:,1), x(:,1).').^2 + bsxfun(@minus, x(:,2), x(:,2).').^2); 

% Set the diagonal to Inf 
d(logical(eye(size(d)))) = Inf; 

% Find the minimum distance and index 
[mindist, ind] = min(d, [], 1); 

% Create the output matrix 
result = [ind(:), mindist(:)]; 

如果有統計工具箱,你可以使用knnsearch找到最接近兩個指向每個點(第一個最接近的是點本身)

[inds, dists] = knnsearch(x, x, 'k', 2); 
result = [inds(:,2), dists(:,2)]; 
+0

你能否更詳細地向我解釋一下MATLAB <2016b的解決方案? 我無法準確理解。謝謝 – gpbdr13