2012-10-01 15 views
6

Vorrei ottenere una colonna diversa da ogni riga da una matrice. Ad esempio:Ottieni una colonna diversa in ogni riga

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

l'uscita dovrebbe resa:

out = [2;4;5] 

Quindi in breve: A è la matrice e B ha indici per le colonne per riga. Come posso farlo senza usare un loop (se è possibile)?

risposta

7

È possibile utilizzare sub2ind per convertire indici (i, j) per indici lineari a matrice A

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

ans = 

2  4  5 

che funziona assumendo che vettore B ha il numero di istruzioni sono le righe a A. Della sub2ind sopra genera un indice lineare per ogni coppia di numeri di riga successivi (1: dimensione (A, 1)) e numeri di colonna indicati in B.

+0

Questo funziona perfettamente, grazie. Devo cercare la documentazione di sub2ind per capire completamente come funziona. – Tim

7

È possibile farlo da diag(A(:,B)), tuttavia esiste un ciclo, ma solo implicito. Non so come farlo senza loop.

+1

Proprio come la risposta usando sub2ind, anche questo ha il trucco perfetto. – Tim

+1

Questo metodo funziona ovviamente, ma nel modo in cui crea una matrice N x N (A (:, B)). Questo è piuttosto un sovraccarico, quando quello che vuoi veramente alla fine è un vettore di dimensioni N. – angainor

+1

Sì, ed è per questo che ho scelto la tua risposta per essere la risposta effettiva :-). – Tim

Problemi correlati