我在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
答案 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),:) = [];
我正在考虑将“下降趋势”视为第二列中具有递减值的任何连续行组。