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
相关产品推荐
相关产品推荐

