Преобразование цикла for в вектор (векторизация)

Для тех супер-экспертов, мне интересно, видите ли вы быстрый способ преобразовать следующий цикл «for» в однострочный векторный расчет, который более эффективен.

%Define:
%A size (n,1)
%B size (n,m)
%C size (n,1)

B = [2 200; 3 300; 4 400];
C = [1;2;1];

for j=1:n
     A(j) = B( j, C(j) );
end

Итак, чтобы было ясно, есть ли какой-либо альтернативный способ выразить A как функцию B и C без необходимости писать цикл?


person GTX    schedule 01.10.2013    source источник


Ответы (2)


Да, есть:

A = B(sub2ind([n,m], (1:n).', C));
person Luis Mendo    schedule 01.10.2013

Это зависит от функций A, B и C, но это может работать:

j = 1:n;
A = B(j, C(j));
person shoelzer    schedule 01.10.2013
comment
похоже, что это дает нежелательные результаты: A становится размером (3x3) таким образом, а не (3x1) - person GTX; 01.10.2013