2011-08-19 7 views
7

Duplicar posibles:
How can I change the values of multiple points in a matrix?Matlab: asignar a la matriz con pares índice de la columna fila

tengo una matriz A y tres vectores de la misma longitud, r, sosteniendo los índices de las filas a asignar, c, que contiene los índices de las columnas a asignar, y v que contiene los valores reales a asignar.

Lo que quiero obtener es A(r(i),c(i))==v(i) para todos i. Pero hacer

A(r,c)=v; 

no cede el resultado correcto como Matlab lo interpreta como la elección de cada combinación posible de r y c y la asignación de valores a la misma, por ejemplo

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

A(r,c)=1; 

produce una matriz de unos, donde me gustaría obtener la matriz de identidad ya que quiero A(r(i),c(i))==1 para cada i, es decir, solo los elementos en la diagonal deberían verse afectados.

¿Cómo puedo lograr el resultado deseado, sin un lazo for?

+0

pregunta similar: [La conversión de una matriz de MATLAB para un vector ] (http://stackoverflow.com/questions/1931545/converting-a-matlab-matrix-to-a-vector) – Amro

+1

@Amro - Aunque estoy de acuerdo en que las respuestas a ambas preguntas son muy similares, las preguntas son diferentes. quería saber cómo asignar a una matriz, mientras que la otra pregunta quiere saber cómo convertir una matriz en un vector. Uno no alcanzaría la otra pregunta cuando busque una respuesta a mi pregunta. – olamundo

+1

No te voté, simplemente lo relacioné con la otra pregunta por ser similar (en lugar de votar para cerrar como duplicado). – Amro

Respuesta

13

OK, he encontrado la respuesta - es necesario utilizar la indexación lineal, es convertir los pares de la columna \ fila en un único índice:

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