0

我有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
4

2 回答 2

2

使用逻辑索引。该diff函数将完全执行此操作A(2:end)- A(1:end-1);并将其绝对值与阈值进行比较,如果更大,则为真。最后,主要的错误是使维度匹配,因为差异会将维度减少一,您可以将其放在差异之前或之后,具体取决于您要删除阈值限制之前的索引还是之后的索引.

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


请注意你的A向量是如何声明的……如果它是列向量 as 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
于 2013-08-19T06:06:33.370 回答
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
于 2013-08-19T06:04:31.547 回答