行列Aとベクトルbがあります。これは、行列の対応する行ごとに抽出される要素の列インデックスを指定します。
例えば、
A = [1 2 3
4 5 6
7 8 9]
b = [1 3 2]'
出力したいのですがc = [1 6 8]'
。これを達成する方法は?
試しA(:, b)
ましたが、必要に応じて動作しません。
行列Aとベクトルbがあります。これは、行列の対応する行ごとに抽出される要素の列インデックスを指定します。
例えば、
A = [1 2 3
4 5 6
7 8 9]
b = [1 3 2]'
出力したいのですがc = [1 6 8]'
。これを達成する方法は?
試しA(:, b)
ましたが、必要に応じて動作しません。
もっとエレガントな解決策があるかもしれませんが、これはうまくいきます:
b = [1 3 2]';
[rows, cols] = size(A);
A(sub2ind([rows cols], [1 : rows]', b))
@dantswainのソリューションの代わりに、常に列から選択していると仮定して、線形インデックスに直接移動できます。
r = size(A,1);
A( (1:r).' + (b-1) * r)
これはより高速になりますが、必ずしもより明確になるわけではありません。
残念ながら、エレガントなソリューションはありません。