在特定条件Matlab下从向量中删除值

时间:2013-08-19 05:39:43

标签: matlab

我有下面显示的向量A,我想从它之前的值中减去每个值,如果差值超过某个限制则删除它。例如,B = A(1:end-1) - A(2:end);这会产生差异,所以B=[-3 -32 -102],如果限制在50到-50之间,那么从B开始,第三个值-102超出限制所以这意味着向量A中的第三个值应该被删除,它将是A=[326 329 463],但我不知道我该怎么做呢?

A=326
    329
    361
    463

2 个答案:

答案 0 :(得分:2)

使用逻辑索引。 diff函数将执行此操作A(2:end)- A(1:end-1);并将其绝对值与阈值进行比较,如果更大,则会导致为真。最后,前导错误是使尺寸匹配,因为diff会将尺寸减小一,你可以把它放在差异之前或之后,这取决于你是否希望删除阈值限制之前的索引,或者之后的那个

A([false (abs(diff(A))>50)])=[];


请注意你的A向量是如何声明的...如果它是列向量为A=[326;329;361;463],则abs(diff(A))返回的值也是列向量,这意味着您需要使用;运算符来加入值。看看正在逐步完成的工作:

>> A=[326;329;361;463]             

A =

   326
   329
   361
   463

>> abs(diff(A))

ans =

     3
    32
   102

>> abs(diff(A))>50    

ans =

     0
     0
     1

>> [abs(diff(A))>50;false]

ans =

     0
     0
     1
     0

>> A([abs(diff(A))>50;false])

ans =

   361

>> A([abs(diff(A))>50;false])=[]

A =

   326
   329
   463

答案 1 :(得分:0)

试试这个:

A=[326 329 361 463];
B=A(1:end-1) - A(2:end);
B(abs(B(1,:))>50)=A(abs(B(1,:))>50);

给出

B=
    -3   -32   361