matlab初学者有阵列问题

时间:2014-01-08 20:12:59

标签: matlab matlab-compiler

我在matlab中有一个数组Z = [x,y],我想删除y的零值以及相应的x。我也想删除下降的趋势。帮我 Z =

      0         0
   11.0000         0
   15.0000    4.1667
   23.0000    4.1667
   25.0000    2.7778
   28.0000         0
   49.0000         0
   54.0000    4.1667
   56.0000    4.1667
   61.0000    8.8889
   85.0000    8.8889
   93.0000    2.7778
   96.0000         0
  117.0000         0
  122.0000    4.1667
  124.0000    4.1667
  133.0000    9.7222
  135.0000    9.7222
  143.0000   13.8889
  155.0000   13.8889
  163.0000    9.7222
  176.0000    9.7222
  178.0000    8.8889
  185.0000    2.7778
  188.0000         0
  195.0000         0

2 个答案:

答案 0 :(得分:1)

使用all

你的条件是:

all(Z(:,2)==0,2)所有第二列都应为零

然后,最后

Z(all(Z(:,2)==0,2),:)=[]会为您提供预期结果,即删除整行

Z =[     0         0   ;
   11.0000         0   ;
   15.0000    4.1667   ;
   23.0000    4.1667   ;
   25.0000    2.7778   ;
   28.0000         0   ;
   49.0000         0   ;
   54.0000    4.1667   ;
   56.0000    4.1667   ;
   61.0000    8.8889   ;
   85.0000    8.8889   ;
   93.0000    2.7778   ;
   96.0000         0   ;
  117.0000         0   ;
  122.0000    4.1667   ;
  124.0000    4.1667   ;
  133.0000    9.7222   ;
  135.0000    9.7222   ;
  143.0000   13.8889   ;
  155.0000   13.8889   ;
  163.0000    9.7222   ;
  176.0000    9.7222   ;
  178.0000    8.8889   ;
  185.0000    2.7778   ;
  188.0000         0   ;
  195.0000         0   ]

>> Z(all(Z(:,2)==0,2),:)=[]

Z =

   15.0000    4.1667
   23.0000    4.1667
   25.0000    2.7778
   54.0000    4.1667
   56.0000    4.1667
   61.0000    8.8889
   85.0000    8.8889
   93.0000    2.7778
  122.0000    4.1667
  124.0000    4.1667
  133.0000    9.7222
  135.0000    9.7222
  143.0000   13.8889
  155.0000   13.8889
  163.0000    9.7222
  176.0000    9.7222
  178.0000    8.8889
  185.0000    2.7778

答案 1 :(得分:1)

第一部分(删除第二列为零的行):与@ P0W的答案一样,但不需要all

Z(Z(:,2)==0,:) = [];

第二部分(删除第二列中有下降趋势的行):使用diff

ind = find([diff(Z(:,2))]<0);
Z(union(ind,ind+1),:) = [];

我正在考虑将“下降趋势”视为第二列中具有递减值的任何连续行组。