2011-08-19 3 views
7

Eventuali duplicati:
How can I change the values of multiple points in a matrix?Matlab: assegnare alla matrice con coppie indice colonna riga

Ho una matrice A e tre vettori della stessa lunghezza, r, tenendo gli indici delle righe da assegnare a, c, tenendo gli indici delle colonne da assegnare a e v contenenti i valori effettivi da assegnare.

Quello che voglio ottenere è A(r(i),c(i))==v(i) per tutti i. Ma fare

A(r,c)=v; 

Non cedere il risultato corretto come MATLAB interpreta come la scelta di ogni possibile combinazione di r e c e assegnando i valori ad esso, per esempio

n=5; 
A=zeros(n); 
r=1:n; 
c=1:n; 

A(r,c)=1; 

rendimenti una matrice di quelli, dove vorrei ottenere la matrice di identità dal momento che voglio A(r(i),c(i))==1 per ogni i, cioè solo gli elementi sulla diagonale dovrebbero essere interessati.

Come posso ottenere il risultato desiderato, senza un ciclo for?

+0

domanda simile: [Conversione una matrice MATLAB per un vettore ] (http://stackoverflow.com/questions/1931545/converting-a-matlab-matrix-to-a-vector) – Amro

+1

@Amro - Mentre sono d'accordo, le risposte a entrambe le domande sono molto simili, le domande sono diverse - I volevo sapere come assegnare a una matrice, mentre l'altra domanda vuole sapere come nascondere una matrice in un vettore. Non si raggiungerebbe l'altra domanda quando si cerca una risposta alla mia domanda. – olamundo

+1

Non ho votato, ho semplicemente collegato l'altra domanda come simile (al contrario di votare per chiudere come duplicato) .. – Amro

risposta

13

OK, ho trovato la risposta - bisogna utilizzare l'indicizzazione lineare, cioè convertire le coppie colonna \ fila in un unico indice:

idx = sub2ind(size(A), r,c); 
A(idx)=v;