2014-02-25 190 views
0

我有兩個向量A & B大小爲250x4。每個矢量中的第一列有X值,第二列有Y值。我想計算兩個向量中每行的每個X & Y之間的歐氏距離,並將結果保存在一個尺寸爲250x1的新向量C中,該向量C保存了歐氏距離的結果。例如,如果在A第一行是A1x, A1y, A1n, A1mB第一行是B1x, B1y, B1n, B1m所以我想獲得eucledian距離,該距離將是[(A1X-B1X)^ 2 +(A1Y-B1Y)^ 2]^0.5和結果將被保存在C1中,其餘的250行也會完成相同的操作。所以如果有人可以請建議如何在Matlab中做到這一點。兩列向量之間的歐幾里得距離Matlab

回答

5

像這樣:

%// First extract on x-y data from A and B 
Axy = A(:,1:2); 
Bxy = B(:,1:2); 
%// Find all euclidean distances (row-wise) 
C1 = sqrt(sum((Axy-Bxy).^2,2)); 

再加上它處理更高的層面太

+1

我冒昧編輯你的答案,以更好地適合問題的具體情況,即只使用「A」和「B」的前兩列。 – Shai

1

使用pdist2

C1=diag(pdist2(A(:,1:2),B(:,1:2))); 

其實,pdist2會給你一個250x250的矩陣,因爲它計算所有的距離。您只需要主對角線,因此對結果調用diag(如上面的代碼中所示)就會生成想要的結果。

+0

AAAA !!!!你在'pdist2'中忽略了所有250x250可能的距離,只是爲了得到結果的'diag'!這是極其低效的。這是Matlab的矢量化功能的一個不好的用法。 – Shai

+0

實際上250 * 250是花生,但實際上你絕對是對的。 (對於計算術語,您的解決方案是2毫秒,我的是3.5毫秒......) – Adiel

+1

1.5毫秒在這裏真的不是問題。使用現成的函數並且在不理解其所做的事情的意義的情況下使用它們是一個糟糕的做法。執行O(n^2)計算而不是O(n)只是因爲有一個'pdist2'函數顯示對所用工具的理解不夠。 – Shai

相關問題