a = [1 1 1; 2 2 2; 3 3 3];
b = [1 2 3];
¿Cómo puedo llamar a una función para obtener un vector v[i] = a[b[i],i]
?¿Cómo seleccionar un elemento de cada columna de una matriz en matlab?
a = [1 1 1; 2 2 2; 3 3 3];
b = [1 2 3];
¿Cómo puedo llamar a una función para obtener un vector v[i] = a[b[i],i]
?¿Cómo seleccionar un elemento de cada columna de una matriz en matlab?
v = a(sub2ind(size(a), b, 1:length(b)))
sub2ind
transforma subíndices en un único índice.
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.