在Matlab中存储坐标并计算欧几里德距离

时间:2017-05-16 11:35:47

标签: matlab

我想使用2D数组在Matlab中存储一组随机生成的坐标,该数组看起来应该是这样的

array = X Y

   t1  x1    y1
   t2  x2    y2
   t3  x3    y3
       ...   ...
   tn  xn    yn    

其中t i 是2D平面中的第i个点并且具有坐标(x i ,y i )< / p>

创建此数组后,我想计算所有1≤i,j≤n的t i 和t j 之间的欧几里德距离。如何在Matlab中实现这一目标?

2 个答案:

答案 0 :(得分:0)

N = 10; % # of points
X = rand(N, 1); % random coordinates
Y = rand(N, 1);
[X1, X2] = meshgrid(X);
[Y1, Y2] = meshgrid(Y);
d = sqrt((X1-X2).^2 + (Y1-Y2).^2); % pairwise distance in NxN, diag 0

上三角或下三角应包含与

的距离
pdist([X Y]) % vector, not a matrix

答案 1 :(得分:0)

您可以使用bsxfun通过数组复制操作。

N = 10;
p = rand(N,2); % coordinates
d = sqrt(bsxfun(@minus,p(:,1),p(:,1)').^2+bsxfun(@minus,p(:,2),p(:,2)').^2);

第一个bsxfun通过扩展单个维度将p(:,1)p(:,1)'中的X坐标复制为NxN矩阵,结果是这些矩阵的减法。同样,第二个bsxfun。其余的只是对平方,和和平方根的数组运算。

如果您碰巧拥有统计工具箱,则可以使用pdist,但这会提供与d的下三角相对应的行向量。