首页 > 解决方案 > 在 Matlab 中执行此矩阵运算是否有更高效的方法

问题描述

我想在 Matlab 中做以下事情:给定一个矩阵 H,我想构建一个相同大小的矩阵 H*,使得 H*(:,i) 是下一列的总和(即 i+1 -> n ) 的 H。例如,如果 H 是

H =

 2     4     7    14
 3     5    11    -3

我期待 H* 是

25    21    14     0
13     8    -3     0

到目前为止,我已经完成了以下一段代码,但它涉及一个for循环,所以我并不期望它非常有效(特别是,我的矩阵在我将使用的实际应用程序中会有大量的列)。

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

有没有办法让它变得更好?

标签: matlabmatrixlinear-algebra

解决方案


cumsum沿第 2 维使用选项'reverse',如下所示:

H_tilde = [cumsum(H(:, 2:end), 2, 'reverse') zeros(size(H,1), 1)];

推荐阅读