2017-04-03 7 views

答えて

1

のは2つの[4 4 2]配列にこれを表示するために、データにいくつかのデータを追加してみましょう:今すぐ

Data = 

    1  2 
    3  4 
    5  4 
    6  2 
    7  0 
    8  2 
    9  2 
    7  4 
    1  4 
    0  2 
    4  0 
    3  2 

、これは仕事をして目を削除する必要があります2番目の列にシーケンス[4 4 2]が含まE行:Dataに含まれる数値の範囲は、使用できる文字列で表現できる値を超えているがあれば@Adielによって提供さ

Seq=[4 4 2];  % sequence to delete rows according to 
Data(bsxfun(@plus,findstr(Data(:,2)',Seq)',(0:length(Seq)-1)),:)=[] 

Data = 

    1  2 
    7  0 
    8  2 
    9  2 
    4  0 
    3  2 
+0

ありがとうございました!それは完璧に働いた。 – Diana

0

回答は、greateのですこの方法:

r = size(Data, 1); 
n = numel(Seq); 
idx = bsxfun(@eq, Data(:,2), Seq); 
idx = 

    0 0 1 
    1 1 0 
    1 1 0 
    0 0 1 
    0 0 0 
    0 0 1 

我々その後、S:

Data = [1 2 
     3 4 
     5 4 
     6 2 
     7 0 
     8 2] 
Seq = [4 4 2] 

は、データの要素を持つ配列の平等を示して行列を作成します。 houldサイズ[r+1,n]idxを作り直す:[4 4 2]の配列はDataに含まれている場合

idx2 = false(r+1, n); 
idx2(idx) = true; 
idx2 = 

    0 1 0 
    1 1 1 
    1 0 0 
    0 0 1 
    0 0 0 
    0 1 0 
    0 0 0 

今すぐ idx2の各列のすべての要素が1だから私たちは、このような行を見つける必要があるだろう。

f = find(all(idx2, 2)); 
    f = 

     2 

したがって、各配列の開始のインデックスが見出される。他の要素を見つけるには0:n-1fに追加します。

idx3 = bsxfun(@plus, f, 0:n-1); 
idx3 = 

    2 3 4 

の要素を削除します。

Data(idx3, :) = []; 
Data = 

    1 2 
    7 0 
    8 2  
関連する問題