2017-01-07 1 views

Antwort

4

Sie können sub2ind verwenden jeden des Spalt Indizes zu konvertieren (zusammen mit ihrer Reihe subscripts) in ein linear index und dann, dass zum Index in der Matrix verwenden.

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 

Alternativ können Sie die lineare Indizes selbst berechnen, die mehr performant sein wird als sub2ind

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

Durch die diag Funktion zu nutzen, können Sie eine elegante einzeilige Lösung erhalten:

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

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

Hier ist, was diag(A(:,cols)) tut:

  1. A(:,cols) wählt die Spalten von colsA mit Spalte k von A(:,cols) entsprechend der Spalte von cols(k)A, [3 4; 4 9] geben;
  2. diag gibt die diagonalen Einträge dieser Matrix und damit an der Position zurückkehrt k die k -te Diagonalelement von A(:,cols), die A(k,cols(k)) ist.
Verwandte Themen