我想使用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中实现这一目标?
答案 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
的下三角相对应的行向量。