温馨提示:本文翻译自stackoverflow.com,查看原文请点击:euclidean distance - matlab
matlab euclidean-distance

euclidean distance - Matlab的

发布于 2020-04-10 23:37:15

我有许多对象,每个对象在自己的点之间有三个距离矩阵(x1-x1,x1-x2,x1-x3 ...; x2-x1,x2-x2,x3-x2 ...)和z。

我想找到尽可能多的附近点,假设旋转不是问题。

我试过了 由于Matlab应该可以轻松处理矩阵,所以我确定有些麻烦,但我不知道如何解决。对于每个对象及其镜像,以及每个轴上的每个平移,都有一个xyz场景:(x1,y1,z1; x2,y2,z2; ...)因此,我将一个对象平移和镜像一百万次。

for m=1:object1
for n=1:object2
 for i=1:NumRows
 for j=1:NumRows2
  d_x(m,n,i,j)=obj(m).xyz(i,1)-obj(n).xyz(j,1);
  d_y(m,n,i,j)=obj(m).xyz(i,2)-obj(n).xyz(j,2);
  d_z(m,n,i,j)=obj(m).xyz(i,3)-obj(n).xyz(j,3);
  d_r(m,n,i,j)=sqrt(d_x(m,n,i,j)*d_x(m,n,i,j)+d_y(m,n,i,j)*d_y(m,n,i,j)+d_z(m,n,i,j)*d_z(m,n,i,j));
  if d_r(m,n,i,j)>=0 & d_r(m,n,i,j)<1.2
   d_r(m,n,i,j)=1.2-d_r(m,n,i,j);
  else
   d_r(m,n,i,j)=0;
  end
  sy(m,n)=sy(m,n)+d_r(m,n,i,j);
 end
 end
end
end

查看更多

提问者
Joita Dan
被浏览
83
Daniel 2020-02-02 23:02

每当您开始将索引放在变量名中时,如果它们可能应该是单个变量,请三思而后行。这里我们有d_x d_y d_z我的建议是将它们替换为单个变量:

d_xyz(m,n,i,j,:)=obj(m).xyz(i,:)-obj(n).xyz(j,:);

现在到下一行,您在那里计算的实际上称为2范数。如果您知道名称,可以简单地将其缩写:

d_r(m,n,i,j) = norm(squeeze(d_xyz(m,n,i,j,:)),2);