2013-05-06 4 views
0

Я хотел бы векторизации следующего кода: Октававекторизация функции по регионам массив Octave/Matlab

A = 1:100; 
B = [20 40 60]; 
C = zeros(3,11); 

for i = B, 
    C(i,:) = A((B(i) - 10) : B(i)); 
end 

который извлекает подмассивы, начиная с определенными индексами из более длинного массива.

Я пробовал:

C = A(B - 10,B); 

Но это возвращает только первый вспомогательный массив.

Благодаря

ответ

1

Как насчет

>> C = A(bsxfun(@plus, -10:0, B')); 

C = 

    10 11 12 13 14 15 16 17 18 19 20 
    30 31 32 33 34 35 36 37 38 39 40 
    50 51 52 53 54 55 56 57 58 59 60 

Если вы не имеете bsxfun в октаву, вы можете сделать это с repmat

C = A(repmat(-10:0, [3 1]) + repmat(B', [1 11])); 

PS,
Это лучше всего not to use i as a variable in Matlab.

+0

Спасибо, они оба прекрасно работали – Tom

Смежные вопросы