Bezdepbonusu7Программирование: статьи и ответы

Вопрос

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

Автор вопроса: GTXОтветов: 2

Для тех супер-экспертов, мне интересно, видите ли вы быстрый способ преобразовать следующий цикл "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 без необходимости писать цикл?

loopsfor-loopmatlabvectorization

Ответы

Ответ 1 · рейтинг 2 · Luis Mendo

Да, есть:

A = B(sub2ind([n,m], (1:n).', C));

Ответ 2 · shoelzer

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

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

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы