MATLABを用いて二段階で範囲を指定したい場合
2 次查看(过去 30 天)
显示 更早的评论
レーザスキャナのデータから範囲指定したデータだけを残したいと考えています。
num=xlsread(filename,1,'H:J'); %ExcelのH列からJ列を1列目から3列目として読み込む
X = num(:,1); %1列目全行をXとする
Y = num(:,2); %2列目全行をYとする
Z = num(:,3); %3列目全行をZとする
X(20<X)=100; %20より大きいXを100とする
X(X<-20)=100; %-20未満のXを100とする
x=find(X<100); %100未満のXを探す
Y(9<Y)=-1; %9より大きいYを-1とする
Y(Y<4)=-1; %2未満のYを-1とする
y=find(Y>0); %0以上のYを探す
Z(Z<-1.0)=10; %-1.0未満のZを10とする
Z(0.1<Z)=10; %0.1より大きいZを10とする
z=find(Z<10);
[xy,iy,iz]=intersect(x,y,'rows'); %x,y共に条件を満たす行を見つける
[xyz,ixy,iz]=intersect(xy,z,'rows'); %x,y,zすべてが条件を満たす行を見つける
X=X(xyz); %条件を満たす行の1行目をXとする
Y=Y(xyz); %条件を満たす行の2行目をYとする
Z=Z(xyz); %条件を満たす行の3行目をZとする
XYZ=[X Y Z];
上のコードでX,Y,Zそれぞれを範囲指定は出来たのですが、Xの範囲のさらに一部だけZ座標を絞り込み、残りは現在の絞り込み範囲で残そうとしています。(具体的には-7.5<X<7.5の範囲だけ-0.5<Z<0.1にしたいと考えています。)
どのようにすれば可能か教えていただけないでしょうか。
0 个评论
回答(1 个)
Dyuman Joshi
2024-1-12
Use logical indexing instead of find() and intersect() -
%Read the data via readmatrix()
num=readmatrix(filename,'Sheet',1,'Range','H:J'); %ExcelのH列からJ列を1列目から3列目として読み込む
X = num(:,1); %1列目全行をXとする
Y = num(:,2); %2列目全行をYとする
Z = num(:,3); %3列目全行をZとする
%Pair multiple conditions on the same array
X(20<X | X<-20)=100; %20より大きいXを100とする %-20未満のXを100とする
Y(9<Y | Y<4)=-1; %9より大きいYを-1とする %2未満のYを-1とする
Z(Z<-1.0 | 0.1<Z)=10; %-1.0未満のZを10とする %0.1より大きいZを10とする
x=(X<100); %100未満のXを探す
y=(Y>0); %0以上のYを探す
z=(Z<10);
xyz = (x & y & z);
X0=X(xyz); %条件を満たす行の1行目をXとする
Y0=Y(xyz); %条件を満たす行の2行目をYとする
Z0=Z(xyz); %条件を満たす行の3行目をZとする
XYZ=[X0 Y0 Z0];
%Narrowing the Z coordinates further
idx = xyz & (Z>-0.5 & Z<0.1) & (abs(X)<7.5)
Z_new=Z(idx);
1 个评论
Atsushi Ueno
2024-1-12
乱数から所定の範囲に入る行を求めてみました。
num = 60 * rand(10000,3) - 30; % 動作確認用に10000行3列の乱数(-30~30)を生成
xyz = ( -20 <= num(:,1)) & (num(:,1) <= 20) ... % 条件を満たすindex(行)を探す
& ( 4 <= num(:,2)) & (num(:,2) <= 9) ... % Yの条件が不要であれば削除する
& (-1.0 <= num(:,3)) & (num(:,3) <= 0.1);
XYZ = num(xyz,1:3)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Statistics and Machine Learning Toolbox 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!