0

我有一个带有 x、y 和 z 坐标的 53534x3 矩阵。我想在范围内找到矩阵的元素,如下所示:

% coordinate range;
x1(x<-25|x>0);
x2(x<0|x>25);
y1(y<-40|y>0);
y2(y<0|y>40);
z1(z<45|z>17);
z2(z<17|z>82);

并将它们插入到一个新矩阵中,使其变为

point1=[x1, y1, z1];
point2=[x2, y2, z2];

我需要找到两点之间的距离。

% define points;
xd=x2-x1;
yd=y2-y1;
zd=z2-z1;
Distance=sqrt(xd*xd+yd*yd+zd*zd);

循环更有效吗?

4

1 回答 1

1

你不需要循环。MATLAB 非常有效地处理整个向量和矩阵。

如果您的矩阵是a

point1 = a( (a(:,1)<-25 | a(:,1)>0) & ...
            (a(:,2)<-40 | a(:,2)>0) & ...
            (a(:,3)< 45 | a(:,3)>17) ,:);

point2 = a( (a(:,1)< 0 | a(:,1)>25) & ...
            (a(:,2)< 0 | a(:,2)>40) & ...
            (a(:,3)<17 | a(:,3)>82) ,:);

point1如果和中的点数point2相等并且您需要点之间的距离以便它们出现在矩阵中,您可以执行以下操作:

xd = point2(:,1)-point1(:,1);
yd = point2(:,2)-point1(:,2);
zd = point2(:,3)-point1(:,3);
Distance=sqrt(xd.^2+yd.^2+zd.^2);

在一般情况下,如果您需要所有点之间的距离point1point2您可以使用 PDIST2 函数:

Distance = pdist2(point1, point2, 'euclidean');
于 2013-04-15T02:03:01.637 回答