2016-07-19 9 views
0

私は愚かな問題がありますが、私は^^への答えを見つけることができません。マトリクス(matlab)で列単位で整数を列方向に検索

私は100x10000 double matrix containing integers from 1 to 4を持って欲しいrow-wiseを見つけることcolumn-count between every single integer

私の最初のアイデアを使用することでした:

storage_ones = cell(100,1); 

    for n = 1:100; 
     [row col] = find(matrix(n,:)==1); 
     storage_ones{n,1} = col; 
    end 

そして、別のループでそれらをsubstract。

空の行列:しかしfindで、私は以下の回答を得る1ずつを、0

誰もが、私はこの問題を解決する方法のアイデアを持っていますか?

ありがとうございます!

+1

あなたはおそらく 'matrix'が '1'に*正確に*等しいことはありません浮動小数点エラーに苦しんでいます。代わりに、 'matrix'が' close(1): 'abs(matrix(n、:) - 1)<1e-12'のどこを探しますか?行列に実際に整数だけが含まれている場合は、 'uint8'などの整数データ型を使用することを検討してください。 – Suever

+0

また、1を持たない可能性もあります。 – Suever

+0

'histc'関数を使ってみましたか? '[a、b] = histc(行列 '、1:4);' – Prakhar

答えて

0

あなたの問題が原因の2つのいずれかに潜在的にある:

  1. あなたがdoubleデータ型を使用しているので、あなたがencountering floating point errors値は1するつもりはないされている場所ということも可能です正確にはです。これが当てはまる場合は、正確な等価性をチェックせず、小さなイプシロン(ここでは私は1e-12を使用)を使用して1に非常に近いかどうかを確認してください。あなたが本当に整数データ型を持っている場合は

    [row, col] = find(abs(matrix(n,:) - 1) < 1e-12); 
    

    は、あなたのデータではなくdoubleを保存するためにuint8を使用することを検討して、あなたは正確な比較を行うことができます。

    matrix = uint8(matrix); 
    
    % Then for your comparison 
    find(matrix(n,:) == 1) 
    
  2. ちょうどその列内の任意の1年代を持っていないかもしれません。 findが一致するものが見つからない場合は、空の配列を返します。

    find([1 2 3] == 4) 
    % Empty matrix: 1-by-0 
    
+0

浮動小数点エラーでした。この1つについては考えなかった:) – gwendolinese

関連する問題