Есть ли более эффективные для выполнения этой матричной операции в Matlab - PullRequest
3 голосов
/ 14 апреля 2020

Я хочу сделать следующее в Matlab: учитывая матрицу H, я хочу построить матрицу H * такого же размера, чтобы H * (:, i) была суммой следующих столбцов (т.е. i + 1 -> n) of H. Так, например, если H равен

H =

 2     4     7    14
 3     5    11    -3

, я ожидаю, что H * будет

25    21    14     0
13     8    -3     0

Пока что я сделал следующий фрагмент кода но он включает for l oop, поэтому я не ожидаю, что он будет очень эффективным (особенно в моей матрице будет большое количество столбцов в практическом приложении, которое я буду использовать).

H_tilde=zeros(size(H));
for i=1:size(H,2)
    H_tilde(:,i)=sum(H(:,i+1:size(H,2)),2);
end

Есть ли способ сделать его лучше? Спасибо !

1 Ответ

5 голосов
/ 14 апреля 2020

Используйте cumsum вдоль 2-го измерения с опцией 'reverse', как указано ниже:

H_tilde = [cumsum(H(:, 2:end), 2, 'reverse') zeros(size(H,1), 1)];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...