fanzhenjie 发表于 2009-4-29 16:43

如何去掉这个矩阵中一些无用的点呀

我有一个矩阵N行三列(是提取的曲面的坐标),每行对应一个点的X,Y,Z坐标,现在我把这些数据按Y从大到排列后,发现对对同一个Y,同一个X,有时候有三个不同的Z值,相当于有两个点是不必要的,我想编一个删除命令,就是在Y由大到小变化中,对于同一个Y值,当X取一个值时,如果发现X取值重复,我这里有的是X多重复了两次,有的没有,需要把重复的两个X所在行删除,只保留第一个Y和第一个X所在的行,后面重复的两行删除!红色的就是需要去掉的行!不知道如果编这个程序呀,谢谢!数据如下:
X20.585Y10.710Z1.004
X20.285Y10.710Z0.968
X19.985Y10.710Z0.933
X19.685Y10.710Z0.899
X19.385Y10.710Z0.865
X19.085Y10.710Z0.831
X18.785Y10.710Z0.798
X18.485Y10.710Z0.765
X18.185Y10.710Z0.733
X17.885Y10.710Z0.702
X2.236Y10.710Z-0.193
X2.236Y10.710Z-0.199
X2.236Y10.710Z-0.205
X2.136Y10.710Z-0.195
X2.136Y10.710Z-0.201
X2.136Y10.710Z-0.207
X2.036Y10.710Z-0.196
X2.036Y10.710Z-0.202
X2.036Y10.710Z-0.209
X1.936Y10.710Z-0.198
X1.936Y10.710Z-0.204
X1.936Y10.710Z-0.210
X1.836Y10.710Z-0.199
X1.836Y10.710Z-0.205
X1.836Y10.710Z-0.211
X1.736Y10.710Z-0.201
X1.736Y10.710Z-0.207
X1.736Y10.710Z-0.213
X1.636Y10.710Z-0.202
X1.636Y10.710Z-0.208
X1.636Y10.710Z-0.214
X0.036Y8.610Z-0.333
X0.036Y8.610Z-0.293
X0.036Y8.610Z-0.349
X0.136Y8.610Z-0.332
X0.136Y8.610Z-0.155
X0.136Y8.610Z-0.348
X0.236Y8.610Z-0.332
X0.236Y8.610Z0.121
X0.236Y8.610Z-0.348
X0.336Y8.610Z-0.331
X0.336Y8.610Z0.580
X0.336Y8.610Z-0.347
X0.436Y8.610Z-0.331
X0.436Y8.610Z1.269
X0.436Y8.610Z-0.346
X0.536Y8.610Z-0.330
X0.536Y8.610Z2.095
X0.536Y8.610Z-0.345
X0.636Y8.610Z-0.329
X0.636Y8.610Z2.966
X0.636Y8.610Z-0.344
X0.736Y8.610Z-0.329
X0.736Y8.610Z3.791
X0.736Y8.610Z-0.343
X0.836Y8.610Z-0.328
X0.836Y8.610Z4.478
X0.836Y8.610Z-0.342
X0.936Y8.610Z-0.327
X0.936Y8.610Z4.936
X0.936Y8.610Z-0.341
X1.036Y8.610Z-0.326
X1.036Y8.610Z5.210
X1.036Y8.610Z-0.340
X1.136Y8.610Z-0.325
X1.136Y8.610Z5.347
X1.136Y8.610Z-0.339
X-34.915Y6.210Z3.095
X-34.615Y6.210Z3.034
X-34.315Y6.210Z2.973
X-34.015Y6.210Z2.913
X-33.715Y6.210Z2.853
X-33.415Y6.210Z2.794
X-33.115Y6.210Z2.736
X-32.815Y6.210Z2.678
X-32.515Y6.210Z2.620

[ 本帖最后由 fanzhenjie 于 2009-4-29 16:48 编辑 ]

friendchj 发表于 2009-4-29 21:25

这个可以试试用diff实现

fanzhenjie 发表于 2009-4-30 08:02

回复 沙发 friendchj 的帖子

是不是保证当Y相同时,如果X差分为0,则去掉这组数呀,帮我写几句命令好不好呀,不太会写呀!谢谢

fanzhenjie 发表于 2009-4-30 08:39

回复 沙发 friendchj 的帖子

我已经解决啦 ,很感谢你:
xd=diff(x77);
san=[];
for xi=1:length(xd)
    if xd(xi)==0
      san=;
    else
      if ~isempty(san)
            x77(san+1)=NaN;
      end
    end
end
x77=x77(find(isnan(x77)~=1));
y77=y77(find(isnan(x77)~=1));
z77=z77(find(isnan(x77)~=1));
页: [1]
查看完整版本: 如何去掉这个矩阵中一些无用的点呀