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];

2点間の距離を見つける必要があります。

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

point1一般に、すべてのポイント間の距離が必要な場合、point2PDIST2 関数を使用できます。

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