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

MATLAB中按第二列相同值求和第一列对应行的实现方法

解决MATLAB中按列分组求和的问题

针对你提出的需求——根据矩阵第二列的相同值,对第一列对应行的数值求和,这里有两种实用的实现方法,适配不同版本的MATLAB:

方法1:使用unique + accumarray(兼容旧版本)

这是MATLAB中处理分组求和的经典方案,几乎所有版本都支持:

% 给定示例矩阵
A = [4000 54571;
     4000 54571;
     4000 54572;
     4000 54573;
     4000 54574];

% 获取第二列的唯一值和分组索引
[unique_vals, ~, idx] = unique(A(:,2), 'stable'); % 'stable'保留原顺序

% 按索引对第一列求和
sum_vals = accumarray(idx, A(:,1));

% 拼接结果矩阵
result = [sum_vals, unique_vals];

运行这段代码后,result就是你想要的输出:

8000 54571
4000 54572
4000 54573
4000 54574

代码解释:

  • unique(A(:,2), 'stable'):提取第二列的唯一值,'stable'参数保证结果顺序和原矩阵中首次出现的顺序一致,避免打乱原有排列。
  • accumarray(idx, A(:,1)):根据idx的分组标识,把第一列中同组的数值累加求和。

方法2:使用groupsummary(MATLAB R2018b及以上版本)

如果你用的是较新的MATLAB版本,groupsummary函数可以更简洁地完成这个任务,一行代码就能搞定:

A = [4000 54571;
     4000 54571;
     4000 54572;
     4000 54573;
     4000 54574];

% 按第二列分组,对第一列求和,保留原顺序
result = groupsummary(A, 2, 'sum', 1, 'GroupOrder', 'preserve');

这个函数直接指定分组列(第2列)、聚合函数(sum)、要聚合的列(第1列),'GroupOrder', 'preserve'确保分组顺序和原矩阵一致,输出结果和方法1完全相同。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:23:52