2011-11-18 16 views

Respuesta

5
v = a(sub2ind(size(a), b, 1:length(b))) 

sub2ind transforma subíndices en un único índice.

0

Otra cosa que debes intentar, manteniéndote muy cerca de tu descripción, puedes usar la función arrayfun.

Primero defina una función que asigna un valor x a la salida deseada.

fn = @(x) a(b(x), x); 

Entonces llamar a esa función en cada entrada en el vector de i.

i = 1:3; 
v = arrayfun(fn, i); 

O, todo esto se puede hacer de una sola línea, de manera obvia:

v = arrayfun(@(x) a(b(x), x), 1:3); 

Este arrayfun es simplemente la abreviatura para el bucle a continuación:

for ixLoop = 1:3 
    v(ixLoop) = a(b(ixLoop),ixLoop); 
end 

El relacionada las funciones arrayfun, cellfun y structfun tienen usos similares y son extrañamente enriquecedoras. This Joel article me convenció para ser un creyente.

Cuestiones relacionadas