Векторизация "треугольной" петли в Matlab - PullRequest
0 голосов
/ 31 октября 2018

В Matlab у меня есть следующее для цикла:

for i=1:n
    for j=i+1:n
        P(i) = P(i) - Q(j);
    end
end

Я называю это «треугольным» циклом из-за того, как j зависит от i.

Возможно ли векторизовать это в однострочный оператор, который будет выполняться быстрее, чем цикл for?

1 Ответ

0 голосов
/ 31 октября 2018

Какие бывают типы P и Q? Они векторы? Если да, то как насчет:

P = P - [fliplr(cumsum(fliplr(Q(2:n)))) 0]

Вы можете даже сделать обратную совокупную сумму, чтобы fliplr мог пойти:

P = P - [cumsum(Q(2:n),'reverse') 0] 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...