2012-10-01 6 views
6

行列から各行の異なる列を取得したいと考えています。例えば:各行に異なる列を取得する

A = [1,2;1,4;5,2] 
B = [2;2;1] 

出力が得られるはず:

out = [2;4;5] 

だから要するに:Aは行列であり、Bは行ごとcolumsのインデックスを持っています。ループを使用せずにこれを行うにはどうしたらいいですか?

答えて

7

あなたがマトリックスに線形インデックスに(i、j)のインデックスを変換するsub2indを使用することができ、そのベクトルBを想定作品

idx = sub2ind(size(A), 1:size(A, 1), B'); 
A(idx) 

ans = 

2  4  5 

上記sub2indにおいてA.内の行と同じ数のエントリを有しています次の行番号(1:size(A、1))とBで与えられた列番号のすべての対に対して線形インデックスを生成します。

+0

これは完全に動作します。ありがとうございます。私は完全に理解するためにsub2indのドキュメントを調べなければなりません。 – Tim

7

これはループがありますが暗黙的です。私はループなしでそれを行う方法を知らない。

+1

sub2indを使用した場合と同様に、これは完璧なやり方です。 – Tim

+1

この方法はもちろん機能しますが、方法によってはN×Nの行列(A(:、B))が作成されます。これは非常にオーバヘッドです。最後に本当に必要なものは、サイズNのベクトルです。 – angainor

+1

これは、私があなたの答えを実際の答えに選んだ理由です:-)。 – Tim

関連する問題