我有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
我有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
使用逻辑索引。该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
尝试这个:
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