You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Matlab中优雅实现矩阵相邻n行求和的方法(支持列向量)

在Matlab中实现相邻n行/元素求和的优雅方法

下面提供两种简洁高效的实现方式,同时支持矩阵(按行求和)和列向量场景:

方法1:reshape + sum(适用于行数/元素数为n整数倍的情况)

利用reshape将矩阵的相邻n行重组为一个维度,再通过sum直接求和,代码简洁且性能优异。

矩阵示例(n=2)

A = [1 2; 
     3 4; 
     5 6; 
     7 8; 
     9 10; 
     11 12];
n = 2;
% 重组维度并求和:将A转为n行、分组列数、原列数的三维数组,沿第一维求和后调整为结果格式
B = squeeze(sum(reshape(A, n, [], size(A,2)), 1))';

运行结果:

B =
     4     6
    12    14
    20    22

列向量示例(n=2)

v = [1;3;5;7;9;11];
n = 2;
B_v = sum(reshape(v, n, []), 1)';

运行结果:

B_v =
     4
    12
    20

方法2:movsum(支持非整数倍的行数/元素数)

如果矩阵行数或向量元素数不是n的整数倍,且希望保留最后一组不足n个的元素求和,movsum(移动求和)是更灵活的选择。通过设置窗口为向前n-1个元素+当前元素,再提取每隔n的结果即可。

矩阵示例(n=2)

A = [1 2; 
     3 4; 
     5 6; 
     7 8; 
     9 10; 
     11 12];
n = 2;
% 沿行方向做窗口大小为n的移动求和,窗口仅包含当前行及之前n-1行
temp = movsum(A, [n-1 0], 1);
% 提取第n、2n、...行作为结果
B = temp(n:n:end, :);

运行结果与方法1一致。

非整数倍场景示例(比如n=2,矩阵7行)

A = [1 2; 3 4; 5 6; 7 8; 9 10; 11 12; 13 14];
n = 2;
temp = movsum(A, [n-1 0], 1);
B = temp(n:n:end, :);

结果会包含最后一组仅1行的求和:

B =
     4     6
    12    14
    20    22
    13    14

列向量非整数倍场景

v = [1;3;5;7;9;11;13];
n = 2;
temp = movsum(v, [n-1 0], 1);
B_v = temp(n:n:end);

结果:

B_v =
     4
    12
    20
    13

内容的提问来源于stack exchange,提问作者the_wicked

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 03:58:22