Matlab中两点之间的距离

时间:2011-11-17 14:07:54

标签: matlab vector distance

我有2个向量,一个是200 * 2维,另一个是3 * 2.它们都是笛卡尔坐标系中的点。我想计算前200个和其他3个点之间的距离,并将它们存储在矢量中。我正在使用这样的函数;

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

其中cur为3,P2为3 * 2向量,C为200 * 2.现在我得到的结果完全错误,但我无法弄清楚问题。任何帮助都会很好,如果有另一种方法来计算它我会很感激。通过更多信息的方式;

P2 = [2 -2;3 -5 ; -1 3];

,另一个是

theta = linspace(0,2*pi,200)';   %'
unitCircle = [cos(theta) sin(theta)];
C = zeros(numel(theta),2,num);

3 个答案:

答案 0 :(得分:7)

square不是用于平方值,而是返回方波的值。

您可以使用pdist2计算两组观察值之间的成对距离,如下所示:

X = randn(200, 2);
Y = randn(3, 2);
D = pdist2(X,Y,'euclidean'); % euclidean distance

答案 1 :(得分:1)

square功能不是您想要的(generates a square wave)。

要计算数字的平方,请使用^运算符:

x = 3;
y = x ^ 2;
disp(y);  % Prints 9

答案 2 :(得分:0)

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