Computing distance between two set of points (under vectorized approach)

1 Ansicht (letzte 30 Tage)
SC
SC am 3 Apr. 2019
Kommentiert: madhan ravi am 3 Apr. 2019
I have two matrices (two set of p-dimensional points), X1 and X2, which are n*p and m*p matrices. I want the final output Dist, whose i-j entries is the distance between row_i of X1 and row_j of X2 (i.e. inner product of the difference).
I want to do this in the vectorization way (avoid using for loop), since the actual matrix size is very big.
For p=2, the following can do the job (X1 is named as XY1 and X2 is named as XY2 in the example, since the dimension is 2 only):-
How can I do that, say for p=10? Many thanks!
function Dist=dist_matrix(XY1,XY2)
% input: both XY1 and XY2 have 2 columns
% input: XY1 and XY2 are not necessarily having same number of rows
X1=XY1(:,1);
Y1=XY1(:,2);
X2=XY2(:,1);
Y2=XY2(:,2);
f = @(hori,verti)(hori-verti);
Dist_X = bsxfun(f,X2',X1);
Dist_Y = bsxfun(f,Y2',Y1);
Dist=sqrt(Dist_X.^2+Dist_Y.^2);
end
  3 Kommentare
SC
SC am 3 Apr. 2019
Thanks for your reply. But what's your exact meaning? For example, how to do the arithmetic operations directly for the below example?
A = [8; 17; 20; 24];
B = [0 10 21];
bsxfun(@(x,y)x+y,A,B)

Melden Sie sich an, um zu kommentieren.

Antworten (0)

Produkte


Version

R2016b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by