2017-01-07 8 views

答えて

4

あなたはlinear indexに(その行の添字と一緒に)列の添字のそれぞれを変換するためにsub2indを使用して、あなたの行列にインデックスにことを使用することができます。

A = [1 3 4 5; 2 4 9 2]; 
cols = [2; 3]; 

% Compute the linear index using sub2ind 
inds = sub2ind(size(A), (1:numel(cols)).', cols); 

B = A(inds) 
% 3 
% 9 

代わりに、あなたはdiag機能を利用することによりsub2ind

B = A((cols - 1) * size(A, 1) + (1:numel(cols)).'); 
% 3 
% 9 
2

よりもパフォーマンスになるだろう自分線形インデックスを計算することができ、あなたは、エレガントな1行の解を得ることができます。

A = [1 3 4 5; 2 4 9 2]; 
cols = [2; 3]; 

B = diag(A(:,cols)) 
% 3 
% 9 

ここにあるのはdiag(A(:,cols))が行う:

  1. A(:,cols)がカラムを、colsAの列を選択Acols(k)は、[3 4; 4 9]を与える列に対応A(:,cols)k
  2. diagは、kk第11番目の対角要素がA(:,cols)であるA(k,cols(k))を返します。この行列の対角エントリを返します。
関連する問題