2012-10-02 11 views
5

Soy nuevo en Matlab, así que no estoy seguro de si esto es posible. Tengo un simple para-loop:Cómo vectorizar para el ciclo con el índice personalizado

for i=1:n 
    B.x(indexB(i)) += A.x(i); 
end 

Dónde A.x y B.x son dos vectores de longitud n, y indiceB es un vector de longitud N que contiene la asignación apropiada de elementos en A.x a b.x.

¿Es posible vectorizar este ciclo?

Respuesta

8

yo creo que sí, siguiendo este ejemplo:

a = [1 2 3 4 5]; 
b = a; 
idx = [5 4 3 2 1]; 
a(idx) = a(idx) + b(1:5); 

que debe dar:

a = 

6  6  6  6  6 

Así, en su caso, si indexB tiene el tamaño n puede escribir:

B.x(indexB) = B.x(indexB) + A.x(1:n); 

Y de lo contrario:

B.x(indexB(1:n)) = B.x(indexB(1:n)) + A.x(1:n); 
+0

¿Esto todavía funcionaría si tanto A como B no tuvieran la misma longitud? –

+0

Sí, pero tiene que haber un mapeo uno a uno entre los índices a la izquierda y a la derecha, o en este caso, el índice vectorial 'indexB' usado para B.x y el vector de índice' [1: n] 'usado para A.x. Y obviamente, los elementos a los que se refieren los índices, necesitan existir. – Maurits

Cuestiones relacionadas