Matlab:在列中查找重复值,并将与它们关联的值相加(在另一列中)

时间:2015-04-20 21:19:04

标签: arrays matlab vector

简单的问题我猜:我有2个向量,一个有1到10的索引号,另一个只有随机值。

id = [1 2 3 4 4 4 5 6 7 7];
val = [.8 .9 .12 .91 .63 .09 .28 .55 .96 .96 ] 

我正在寻找的结果应该是:

new_id = [1 2 3 4 5 6 7];
val = [.8 .9 .12 1.63 .28 .55 1.92] 

我该怎么做? 谢谢!

2 个答案:

答案 0 :(得分:3)

使用uniqueaccumarray

[new_id, ~, v] = unique(id(:));
val_summed = accumarray(v, val(:));

即使id不一定是正整数,上述工作仍然有效。如果是,则替代方法是使用sparse来执行总和,并使用find来提取所需结果:

[new_id, ~, val_summed] = find(sparse(id, 1, val));

答案 1 :(得分:1)

您想要的功能称为 accumarray

accumarray(id',val)

它根据id下标计算新元素。