0

以下に示すベクトルAがあります。各値をその前の値から減算し、差が特定の制限を超えた場合は削除します。たとえば、 B = A(1:end-1) - A(2:end);これは差を取得するためB=[-3 -32 -102]、制限が 50 と -50 の間である場合B、3 番目の値から示されるよう-102に制限の外にあるため、ベクトルの 3 番目の値はAその場所で削除する必要があることを意味しますがA=[326 329 463]、私は'どうすればこれを行うことができるかわかりませんか?

A=326
    329
    361
    463
4

2 に答える 2

2

論理インデックスを使用します。関数はこのdiff操作を正確に実行しA(2:end)- A(1:end-1);、その絶対値をしきい値と比較します。値が大きい場合は true になります。最後に、先頭の false はディメンションを一致させることです。これは、diff によってディメンションが 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
于 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 に答える