我有下面显示的向量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
答案 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