2017-06-09 14 views
-1

私は画像のような行列を持っています。この行列では、ある行の値のいずれかが別の行にある場合、短い行が削除されます。たとえば、2行目から5行目にはすべて3が含まれているため、5行目(ゼロ以外の値が最も多い行)のみを残し、他のすべての行を削除したい...解決策を提案してください。MATLAB。行の値のいずれかが別の行にある場合、行を削除するにはどうすればよいですか?

おかげ

enter image description here

答えて

0

私は以下のコードがうまくいくと思います。この考え方は、行の要素の数に従って最初に行列をソートし、次に一致する行をループして削除することです。おそらくない最も効率的なコードが、原則的に動作するはずです。..もっと説明

% generating the data 
M = zeros(6, 10); 
M(2,1:3) = [3 8 10]; 
M(3,1:4) = [3 8 10 9]; 
M(4,1:5) = [3 8 10 9 7]; 
M(5,1:6) = [3 8 10 9 7 4]; 
M(6,1) = [5]; 

% sorting according to the number of non-zero elements 
nr_of_nonzero = sum(M~=0, 2); 
[~, sort_indices] = sort(nr_of_nonzero); 
M_sorted = M(sort_indices,:); 
M_sorted(M_sorted==0)=NaN; % should not compare 0s (?) 

% get rid of the matches 
for i=1:size(M_sorted, 1)-1 
    for j=(i+1):size(M_sorted, 1) 
     [C,ia,ib] = intersect(M_sorted(i,:),M_sorted(j,:)); 
     if numel(C)>0 
      M_sorted(i,:) = NaN; 
     end 
     break; 
    end 
end 

% reorder 
M(sort_indices,:) = M_sorted; 

% remove all NaN rows 
M(all(isnan(M),2),:) = []; 
% back to 0s 
M(isnan(M)) = 0; 
+0

おかげでたくさん...私のために素晴らしい作品。 –

0

私はここですべてのコードを実行するが、ここで私はそれを解決するのにかかる手順だいませんよ。意図した結果(つまり、ベクトル演算、whileループ、forループなど)を得るには、さまざまな方法を試す必要があります。

問題

行が反復され、よりコンパクトな形で削減する必要があります。

ソリューションは

  1. mat2strを検索します。
  2. ベクトル(行)を文字列に変換します。 tmpstr1 = mat2str(yourMatrix(rowToBeCompared, :));
  3. 最初の文字列を最初から最後まで解析し、2番目の文字列を同じ方法で解析して比較します。
  4. 使用strcmpは、文字列の文字(または文字列自体が)同じかどうかを確認するには:あなたはそれが適切なyourMatrix[rowToDelete, : ] = [];

はそれを試してみて、それが動作するかどうかを確認して見つけた場合

  • http://www.mathworks.com/help/matlab/ref/strcmp.htmlが行を削除します。

    注 - ステップ3の拡張:したがって、あなたがループして文字列を解析することができます

    a(4) 
    ans = '+' 
    a(5) 
    ans = '1' 
    a(1) 
    and = '[' 
    

    我々はa = '[ab+11]';変数を持っている場合、我々は次のように文字列から個々の文字を選択することができます:

    for n = 1 : length(a) 
        if a(n) == '1' || a(n) == '0' 
         str(n) = a(n); 
        end 
    end 
    

    Sardar Usama氏によると、私たちができるようにコードを提供すると便利です独自のMATLABワークスペースに貼り付けて貼り付けます。

  • +0

    のコメントを参照してくださいおかげでたくさん.....本当に便利 –

    関連する問題