MATLAB Answers

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

12 views (last 30 days)
SC
SC on 3 Apr 2019
Commented: madhan ravi on 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 Comments

madhan ravi
madhan ravi on 3 Apr 2019
You can do the arithmetic operations directly since your using 2016b version no need to use bsxfun().
SC
SC on 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)

Sign in to comment.

Answers (0)


Translated by