范围内的元素和两点之间的距离

时间:2013-04-15 01:48:14

标签: matlab loops matrix range element

我有一个带有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);

循环是否更有效率?

1 个答案:

答案 0 :(得分: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) ,:);

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

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');