7

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

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

出力は次のようになります。

out = [2;4;5]

つまり、:Aは行列でBあり、行ごとの列のインデックスがあります。ループを使用せずにこれを行うにはどうすればよいですか(可能な場合)?

4

2 に答える 2

8

sub2indを使用して、(i,j) インデックスを行列 A の線形インデックスに変換できます。

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

ans =

 2     4     5

これは、ベクトル B に A の行と同じ数のエントリがあると仮定して機能します。上記の sub2ind では、後続の行番号 (1:size(A, 1)) と B で指定された列番号のすべてのペアに対して線形インデックスを生成します。

于 2012-10-01T12:02:58.817 に答える
8

あなたはそれを行うことができますがdiag(A(:,B))、ループがありますが、暗黙的です。ループなしでそれを行う方法がわかりません。

于 2012-10-01T12:03:43.650 に答える