行列の各行から異なる列を取得したいと思います。例えば:
A = [1,2;1,4;5,2]
B = [2;2;1]
出力は次のようになります。
out = [2;4;5]
つまり、:A
は行列でB
あり、行ごとの列のインデックスがあります。ループを使用せずにこれを行うにはどうすればよいですか(可能な場合)?
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 で指定された列番号のすべてのペアに対して線形インデックスを生成します。
あなたはそれを行うことができますがdiag(A(:,B))
、ループがありますが、暗黙的です。ループなしでそれを行う方法がわかりません。