私はこの行列を持っている:検索の奇妙な行動()
a = [1 2 2 1; 1 1 2 2]
% 1 2 2 1
% 1 1 2 2
私はすべて1ののを見つけて、ゼロにそれらを載せていきたいと思います。
[~, a_i] = find(a == 1);
a(a_i) = 0
% 0 2 2 1
% 0 0 2 2
なぜ、最初の行にまだ1がありますか?あなただけfind
の第二の出力を使用しているので、
私はこの行列を持っている:検索の奇妙な行動()
a = [1 2 2 1; 1 1 2 2]
% 1 2 2 1
% 1 1 2 2
私はすべて1ののを見つけて、ゼロにそれらを載せていきたいと思います。
[~, a_i] = find(a == 1);
a(a_i) = 0
% 0 2 2 1
% 0 0 2 2
なぜ、最初の行にまだ1がありますか?あなただけfind
の第二の出力を使用しているので、
あなたはそれをやっている方法、あなただけの列のインデックス1
年代のを得ています。
[~, col] = find(a == 1)
% 1 1 2 4
あなたはa
へのインデックスとしてこれを使用する場合には、線形インデックスとしてこれらを治療し、0
にのみ第一、第二、およびa
で4番目の値を変更することが起こっています。リニアインデックスはcolumn-major orderで実行されます。これにより、表示されている出力が得られます。あなたが何をしようとして行うには
、あなたは、行と列のインデックスを取得し、あなたがa
へのインデックスに使用することができ、線形インデックスにこれらを変換するsub2ind
を使用するfind
の両方の出力を必要とします。
[row, col] = find(a == 1);
a(sub2ind(size(a), row, col)) = 0;
これは単に直接線形インデックスを返し、それを使用find
の単一出力バージョンを使用するように非常に簡単です。
ind = find(a == 1);
a(ind) = 0;
いっそ、単に論理的インデックスに
a(a == 1) = 0;
ありがとう!私は今、私のエラーを理解しています! :) – henry
を使用する質問が面白いです、と非常に良い答えを得ました。しかし、タイトルをfind()_の奇妙な振る舞いに変更することをお勧めします。現在のタイトル(_find()が動作していない)を見たときの私の最初の考えは "もちろんです" –