问题
I have 2 vectors one is 200*2 in dimension and other is 3*2.All of them are points in a cartesian coordinate system. I want to calculate the distance between the first 200 and the other 3 points and store them in a vector. I'm using a function like this;
for i=1:cur
for j=1:200
L(j,i)=sqrt(square(P2(i,1)-C(j,1))+square(P2(i,2)-C(j,2)))
end
end
where cur is 3 , P2 being the 3*2 vector and C being the 200*2.Now the results i get are completely wrong but I cannot figure out the problem in that. Any help would be good , if there is another way to compute it i would appreciate.By the way for more information ;
P2 = [2 -2;3 -5 ; -1 3];
and the other is
theta = linspace(0,2*pi,200)'; %'
unitCircle = [cos(theta) sin(theta)];
C = zeros(numel(theta),2,num);
回答1:
square is not for squaring a value, it returns the values of the square wave.
You can use pdist2 to compute pairwise distance between two sets of observations as follows:
X = randn(200, 2);
Y = randn(3, 2);
D = pdist2(X,Y,'euclidean'); % euclidean distance
回答2:
The square
function is not what you want (it generates a square wave).
To calculate the square of a number, use the ^
operator:
x = 3;
y = x ^ 2;
disp(y); % Prints 9
回答3:
tic
A = pdist2( X, X);
toc
% method 2
tic
n = size(X, 1);
idx = repmat(1:n, n, 1);
D = sqrt(sum((X(idx,:)-X(idx',:)).^2, 2));
D = reshape(D, n, n);
toc
find(A-D)
Elapsed time is 0.021950 seconds.
Elapsed time is 0.043413 seconds. % and add your satisfaction approximately -0.02 seconds
来源:https://stackoverflow.com/questions/8168439/distance-between-two-points-in-matlab